typescript 类型的交并运算问题,官方文档好像也没给交并运算的详细信息,就给了一个基本的用法

2022-06-07 12:14:05 +08:00
 TWorldIsNButThis
type IssueExcludeAssigneesField = {
  id: number
  project_id: number
  title: string
  due_date: string | null
}
type Assignee = {
  name: string
}

type Issue = IssueExcludeAssigneesField & ({ assignees: [Assignee] } | { assignees: [] })
type Issue2 = IssueExcludeAssigneesField & { assignees: [Assignee] | [] }


declare function map<T1, T2>(_: (_: T1) => T2): T2
declare function pick<T>(_: T): Pick<T, keyof T>

map<Issue, Issue>(pick)  // Type '[Assignee]' is not assignable to type '[]'.
map<Issue2, Issue2>(pick) // OK

declare function mapIssue(_: Issue): Issue2
map<Issue, Issue>(mapIssue) // OK

type assignees1 = Issue['assignees']
type assignees2 = Issue2['assignees']
declare function mapAssignee(_: assignees1): assignees2
map<assignees1, assignees1>(mapAssignee) // OK

playground

上面的这段代码为啥第一个 pick 会报错
后面的两个 map 应该能证明两个 issue 和 assignees 都是可以互相赋值的等价的类型吧

1066 次点击
所在节点    TypeScript
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX