我有一个函数,其参数可以是空数组或带字符串的数组。
所以我用联合类型[] | string[]
然后,在函数内部,我检查是否array.length> 0,如果是,那么我将映射到参数上。
type Kennel = [] | string[]
const petDogs = (kennel: Kennel) => {
if (kennel.length > 0){
return kennel.map((name:string)=>name)
} else {
return "no doggies to pet"
}
}
但是,在编译时,出现错误
Cannot invoke an expression whose type lacks a call signature. Type '(<U>(callbackfn: (value: never, index: number, array: never[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[])' has no compatible call signatures
我尝试过使用函数重载,但是并不能解决编译错误。
示例:
interface PetDogs {
(kennel: []): string;
(kennel: string[]): string[];
}
答案 0 :(得分:2)
[]
是tuple type,用于另一种用例。 string[]
是数组类型,而空数组仍然是string[]
类型。您的代码可以正常运行而不会出现编译错误:
type Kennel = string[]
const petDogs = (kennel: Kennel) => {
if (kennel.length > 0){
return kennel.map((name:string)=>name)
} else {
return "no doggies to pet"
}
}
petDogs([]);
petDogs(["Fido", "Doggo"]);