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
上面的这段代码为啥第一个 pick 会报错
后面的两个 map 应该能证明两个 issue 和 assignees 都是可以互相赋值的等价的类型吧
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.