打字稿告诉我“字符串 | T[]' 不能分配给类型为 'ReadonlyArray<T>' 的参数

约瑟夫王

我正在构建一个名为unique.

它的作用是从数组或字符串中删除所有重复项,因此它具有function overloading.

请参阅此问题代码示例:

function unique(str: string): string[];
function unique<T>(arr: T[]): T[];

/**
 * Create an `array` without duplicates.
 */

function unique<T>(arrOrString: string | T[]): string[] | T[] {
  return [...new Set(arrOrString)]; // typescript will yell at me at this line.
}

export default unique;

在此处输入图片说明

在此处输入图片说明

但是,如果我将代码更改为 if-else 但实际上什么都不做,打字稿现在可以满足:


// same code, but actually compiling.

function unique(str: string): string[];
function unique<T>(arr: T[]): T[];

/**
 * Create an `array` without duplicates.
 */

function unique<T>(arrOrString: string | T[]): string[] | T[] {
  if (typeof arrOrString === 'string') {
    return [...new Set(arrOrString)];
  } else {
    return [...new Set(arrOrString)];
  }
}

export default unique;

为什么会这样?我必须写[...new Set(arrOrString)]两次才能使它工作吗?

工会的

这是因为Set()构造函数不能接受 type string | T[]

这实际上是一件好事。

您的代码服务于两种情况:当输入是string或它是T[].

使用函数重载可以使您的代码更易于使用:

function unique<T>(arrOrString: string): string[]
function unique<T>(arrOrString: T[]): T[]
function unique<T>(arrOrString: any): any {
    return [...new Set(arrOrString)];
}

const y = unique('x') // y is string[]

const p = unique([1, 2, 3]) // p is number[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类型“ Partial <T>”的参数不能分配给类型“ T”的参数

来自分类Dev

'{ title: string; 类型的参数 描述:字符串;}' 不能分配给类型为 '{ id: {}; 的参数 标题: {}; 描述: {}; }'

来自分类Dev

打字稿:“ RegExpMatchArray”类型的参数无法分配给“字符串”类型的参数

来自分类Dev

打字稿错误:TS2345:“ {主题类型:字符串;jsonFile:字符串; 输出:字符串;}; }”不能分配给“选项”类型的参数

来自分类Dev

“字符串类型的参数不能分配给自定义类型的参数”的难看的问题

来自分类Dev

提取:“字符串”类型的参数| 未定义”不能分配给“ RequestInfo”类型的参数

来自分类Dev

“数字”类型的参数不能分配给 angular2 中“字符串”类型的参数。

来自分类Dev

“文件”类型的参数不能分配给“字符串”类型的参数

来自分类Dev

类型“ any”的参数不能分配给“从不”类型的参数打字稿解决方案

来自分类Dev

打字稿-类型“ X”的参数不能分配给类型“ Y”的参数

来自分类Dev

承诺:void 类型的参数不可分配给类型 T

来自分类Dev

在量角器打字稿上拖放操作时出错,类型 '"{x: 540, y: 504}"' 的参数不能分配给类型为 'ILocation' 的参数

来自分类Dev

减少数组功能的打字稿错误-无法将“字符串”分配给类型的参数

来自分类Dev

“数字”类型的参数不能分配给“字符串”类型的参数。将旧项目导入新项目时

来自分类Dev

Angular4:编译失败:参数类型{路径:字符串,组件 HomeComponent}[] 不能分配给参数类型路由

来自分类Dev

打字稿通用类型参数:T vs T扩展{}

来自分类Dev

类型不能分配给类型“ T”,但是可以用约束类型的其他子类型实例化“ T”

来自分类Dev

打字稿。将通用<T>键定义为字符串

来自分类Dev

类型为import()。Client的参数不能分配给类型为import()。Client的参数

来自分类常见问题

打字稿类型'字符串| 留言| (string [] | Message [])[]'不能分配给'string [] | 信息[]'

来自分类Dev

打字稿类型'字符串| 留言| (string [] | Message [])[]'不能分配给'string [] | 信息[]'

来自分类Dev

类型“ null”不可分配给类型“ T”

来自分类Dev

无法将类型“未知”的参数分配给类型“字符串”的参数

来自分类Dev

类型'string |的参数 字符串[] | 解析的Q | ParsedQs []'无法分配给'string'类型的参数

来自分类Dev

参数类型“ CheckIn”不能分配给参数类型“()-> CheckIn”

来自分类Dev

参数类型不能分配给参数类型,应为

来自分类Dev

类型'this'的参数不能分配给'工具'类型的参数

来自分类Dev

类型'“”'的参数不能分配给类型'“ prototype”'茉莉的参数

来自分类Dev

类型“ X”的参数不能分配给类型“ Y”的参数

Related 相关文章

  1. 1

    类型“ Partial <T>”的参数不能分配给类型“ T”的参数

  2. 2

    '{ title: string; 类型的参数 描述:字符串;}' 不能分配给类型为 '{ id: {}; 的参数 标题: {}; 描述: {}; }'

  3. 3

    打字稿:“ RegExpMatchArray”类型的参数无法分配给“字符串”类型的参数

  4. 4

    打字稿错误:TS2345:“ {主题类型:字符串;jsonFile:字符串; 输出:字符串;}; }”不能分配给“选项”类型的参数

  5. 5

    “字符串类型的参数不能分配给自定义类型的参数”的难看的问题

  6. 6

    提取:“字符串”类型的参数| 未定义”不能分配给“ RequestInfo”类型的参数

  7. 7

    “数字”类型的参数不能分配给 angular2 中“字符串”类型的参数。

  8. 8

    “文件”类型的参数不能分配给“字符串”类型的参数

  9. 9

    类型“ any”的参数不能分配给“从不”类型的参数打字稿解决方案

  10. 10

    打字稿-类型“ X”的参数不能分配给类型“ Y”的参数

  11. 11

    承诺:void 类型的参数不可分配给类型 T

  12. 12

    在量角器打字稿上拖放操作时出错,类型 '"{x: 540, y: 504}"' 的参数不能分配给类型为 'ILocation' 的参数

  13. 13

    减少数组功能的打字稿错误-无法将“字符串”分配给类型的参数

  14. 14

    “数字”类型的参数不能分配给“字符串”类型的参数。将旧项目导入新项目时

  15. 15

    Angular4:编译失败:参数类型{路径:字符串,组件 HomeComponent}[] 不能分配给参数类型路由

  16. 16

    打字稿通用类型参数:T vs T扩展{}

  17. 17

    类型不能分配给类型“ T”,但是可以用约束类型的其他子类型实例化“ T”

  18. 18

    打字稿。将通用<T>键定义为字符串

  19. 19

    类型为import()。Client的参数不能分配给类型为import()。Client的参数

  20. 20

    打字稿类型'字符串| 留言| (string [] | Message [])[]'不能分配给'string [] | 信息[]'

  21. 21

    打字稿类型'字符串| 留言| (string [] | Message [])[]'不能分配给'string [] | 信息[]'

  22. 22

    类型“ null”不可分配给类型“ T”

  23. 23

    无法将类型“未知”的参数分配给类型“字符串”的参数

  24. 24

    类型'string |的参数 字符串[] | 解析的Q | ParsedQs []'无法分配给'string'类型的参数

  25. 25

    参数类型“ CheckIn”不能分配给参数类型“()-> CheckIn”

  26. 26

    参数类型不能分配给参数类型,应为

  27. 27

    类型'this'的参数不能分配给'工具'类型的参数

  28. 28

    类型'“”'的参数不能分配给类型'“ prototype”'茉莉的参数

  29. 29

    类型“ X”的参数不能分配给类型“ Y”的参数

热门标签

归档