如何在 Typescript 中映射可能为空的数组

Nic*_*key 2 typescript

我有一个函数,其参数可以是空数组或带有字符串的数组。

所以我用联合类型来处理这个 [] | 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)

Aar*_*all 5

[]是一个元组类型,适用于不同类型的用例。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)