我有一个函数,其参数可以是空数组或带有字符串的数组。
所以我用联合类型来处理这个 [] | 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"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在编译时,我收到错误
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[];
}
Run Code Online (Sandbox Code Playgroud)
[]是一个元组类型,适用于不同类型的用例。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"]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3605 次 |
| 最近记录: |