【发布时间】:2018-02-19 19:28:41
【问题描述】:
下面的打字稿代码显示从getName(personA) 分配给result 时的类型错误以及通过getName([personA, personB]) 调用分配[nameA, nameB] 时的类型错误。
尽管getName() 接收到对象输入时,返回值是一个字符串,而当getName 调用接收到对象输入的数组时,返回值始终是数组。由于Array.isArray(data) 检查。
const personA = {
name: "person A"
}
const personB = {
name: "person B"
}
function getName(data: object | object[]): string | string[] {
if (Array.isArray(data)) {
return data.map(extractName)
} else {
return extractName(data)
}
}
function extractName(object): string {
return object.name
}
// shows a type error
const result: string = getName(personA)
// shows type error
const [nameA, nameB] = getName([personA, personB])
有没有教打字稿const result: string = getName(personA) 和const [nameA, nameB] = getName([personA, personB]) 不应该显示类型错误?也许某种类型的泛型魔法?
您可以使用上面的代码在 typescript playground 中快速复制错误。 https://www.typescriptlang.org/play/index.html
【问题讨论】:
-
我认为你还不能正确输入这个,但是在 2.8 中应该可以用条件类型来做到这一点github.com/Microsoft/TypeScript/pull/21316
标签: arrays typescript