Typescript 推断模板字符串返回意外的推断结果
我在想下面的Typescript 推断模板字符串返回意外的推断结果,typescript,Typescript,我在想下面的Y将返回test,但是,它返回never,有人知道原因和可能的解决方案吗 type X<T> = T extends `${infer U}.${number}` ? U : never type Y = X<`test.${number}`>; // expect "test" but got never type X=T扩展了`${inferu}.${number}`?U:从来没有 类型Y=X;//期待“测试”,但从未得到 取自 占
Y
将返回test
,但是,它返回never
,有人知道原因和可能的解决方案吗
type X<T> = T extends `${infer U}.${number}` ? U : never
type Y = X<`test.${number}`>; // expect "test" but got never
type X=T扩展了`${inferu}.${number}`?U:从来没有
类型Y=X;//期待“测试”,但从未得到
取自
占位符中的任意类型Any、string、number、boolean或bigint都会导致模板文字解析为string类型
此代码按预期工作:
type X=T扩展了`test.${infera}`?答:从来没有;
类型Z=X;//一串
类型Z1=X;//一串
类型Z2=X;//“假”|“真”
但是,此代码的工作方式与您期望的一样:
type X=T扩展了`${inferb}.${infera}`?B:从来没有;
类型Z=X;//“测试”
为什么它与boolean
一起工作?因为boolean是一个联合类型,在引擎盖下是“true | false”
因此,这应该是可行的:
类型Z=X;//测试
如果我们已经知道它适用于并集类型,我想我们可以生成一些数字的并集
摘自我的,:
类型值=T[keyof T];
文字数字类型=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
类型NumberString=`${T}`
类型appendDigital=`${T}${literaldights}`
类型MakeSet={
[P/T]:数字;
};
类型RemoveTrailingZero<
T扩展字符串
>=T扩展`${expert Fst}${expert Rest}`
? Fst扩展了'0`
? 拆下导轨零位
:`${Fst}${Rest}`
:从不;
键入从_1_到_999=RemoveTrailingZero<
价值观<
{
[P值]:数字
;
}
>
>;
type By=RemoveTrailingZero<
价值观<
{
[P在V中]:数字
;
}
>
>;
/**
*这里没有使用递归,
*因为我的CPU会爆炸
*/
键入从1_到9999=
|从1号到999号
|借
|通过;
类型X=T扩展了`${inferb}.${infera}`?B:从来没有
类型Z=X;//测试
还有另一种解决方案,对CPU来说并不昂贵,但有其自身的局限性:
输入PrependNextNum
因此,由您决定哪种解决方案更适合您。我认为这是设计限制。这里有TS PR找不到这样的功能它与Xthanks@captain yossarian yea一起工作,只是推断不适用于弦部分。