为什么在类型声明中使用类型联合时 TypeScript 会抛出错误?
Why does TypeScript throw error when using type unions in type declarations?
我正在尝试为简单的 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'.
从类型的角度来看,您尝试做的事情并不合理。类型定义:
...(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][]
我正在尝试为简单的 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'.
从类型的角度来看,您尝试做的事情并不合理。类型定义:
...(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][]