只是为了补充@bela53的回答,可以使用
const assertions来进行类型构建。
const hours = [
'00' , '01', '02', '03', '04', '05', '06', '07', '08',
'09' , '10', '11', '12', '13', '14', '15', '16',
'17' , '18', '19', '20', '21', '22', '23'
] as const
type HH = typeof hours[number]
const minutes = [
'00', '01', '02', '03', '04', '05', '06', '07', '08', '09',
'10', '11', '12', '13', '14', '15', '16', '17', '18', '19',
'20', '21', '22', '23', '24', '25', '26', '27', '28', '29',
'30', '31', '32', '33', '34', '35', '36', '37', '38', '39',
'40', '41', '42', '43', '44', '45', '46', '47', '48', '49',
'50', '51', '52', '53', '54', '55', '56', '57', '58', '59'
] as const
type MM = typeof minutes[number]
type Time = `${HH}:${MM}`
function test(arg: T): T {
return arg;
}
let x = test("test");
在这个例子中,我期望x
的类型应该是string
,但实际上x
的类型是unknown
。当然,你可以明确指定类型参数来解决这个问题:let x = test("test");
但这不是我的目标。我希望 TypeScript 能够自动推断出类型参数,就像在没有设置默认返回类型时一样。这个问题在 TypeScript 1.8 中就已经存在了,而且好像没有被解决。我不确定这是一个 bug 还是一个 feature,但无论如何,这种行为至少应该得到记录和说明。 - Titian Cernicova-Dragomir