【问题标题】:Why does TypeScript throw error when using type unions in type declarations?为什么在类型声明中使用类型联合时 TypeScript 会抛出错误?
【发布时间】:2021-06-23 09:34:21
【问题描述】:

我正在尝试为简单的 npm 包 merge-ranges 编写类型声明

我想出了以下几点:

type rangeElement = number | Date;
type range = [rangeElement, rangeElement];

declare module "merge-ranges" {
  declare function mergeRanges(ranges: range[]): range[];
  export default mergeRanges;
}

但是,当使用 Date 进行测试时,范围打字稿会抛出错误,说 Type 'number' is not assignable to type 'Date'.,而在使用数字范围进行测试时,错误是 Type 'Date' is not assignable to type 'number'.

【问题讨论】:

  • 你能显示一个未通过类型检查的函数调用吗?
  • 你能举一个失败的例子吗?
  • 您发布的代码不会产生任何错误。请编辑以创建minimal reproducible example

标签: typescript union declaration


【解决方案1】:

从类型的角度来看,您要做的不是声音。类型定义:

...(range: [(number | Date), (number | Date)][])...

允许元素的明显错误组合。例如[1, new Date()] 是这种类型的完全有效值。

您真正需要的是输入[number, number][][Date, Date][] 的参数。并添加function overloads 以正确输入结果:

declare function mergeRanges(ranges: [number, number][]): [number, number][]
declare function mergeRanges(ranges: [Date, Date][]): [Date, Date][]

playground link

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2021-02-27
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2022-08-18
    • 2020-11-04
    相关资源
    最近更新 更多