首页 > 解决方案 > 将数组作为参数应用到 Date 构造函数

问题描述

我正在尝试Date从 a构造string[]具有可变数量元素的 a - 有时是 3,有时是 6。但是,以下 Typescript 代码无法编译:

const parts = ['1', '1', '2001'];
const dte = Date.apply(undefined, parts) as Date;

和:

'string[]' 类型的参数不可分配给 '[]'.ts(2345) 类型的参数

大概编译器正在尝试Date不带参数的构造函数,这是我不想要的。但即使数组是number[],编译器似乎也没有找到正确的重载:

const parts1 = parts.map(x => parseInt(x,10));
dte = Date.apply(undefined, parts1) as Date;

我该如何解决这个问题?

更具体地说,如何Date使用值数组作为构造函数的参数来创建一个?

标签: typescript

解决方案


首先,确保使用数字而不是字符串。这就是类型签名所说的。

[1, 1, 2001]

然后,告诉 TypeScript 你刚刚告诉我们的内容——你的列表不仅仅是任何数字列表 ( number[]),而是恰好包含 3 个或更多项目的列表。

type Sequence<T> = [T, T, T, ...T[]];

const parts: Sequence<number> = [1, 1, 2001];

您需要做的就是创建一个new Date.

const dte = new Date(...parts);

推荐阅读