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

时间:2019-05-28 16:33:11

标签: 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"
  }
}

但是,在编译时,出现错误

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[];
}

1 个答案:

答案 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"]);