Zac*_*ach 5 typescript typescript-generics
更新:我现在意识到我忽略了运行时如何处理字符串,因此 100 + 5 实际上不会像我预期的那样工作。我将保留此问题,看看是否有人对我的问题有更好的解决方案,而不是类型转换或类型定义。
我一直在寻找,所以如果这是一个重复的问题,我深表歉意,但是我想知道是否可以为数字字符串定义一个 TypeScript 类型,它接受一个字符串或一个值,然后指示它始终是一个数字?我将数据发送到许多不同的系统,不幸的是,我无法控制模型定义(它们由拥有数据的各个团队控制)。这让我不得不将所有字符串转换为数字来进行计算,然后返回字符串以使 IDE 满意,并导致大量额外工作。
如果我能做如下的事情,我会很高兴,这将有助于减少多余的工作量:
type NumericalString<T extends number | string> = T extends (string | number) ? number : never;
let someVal: NumericalString = "100"; // Recognized as 100 by IDE
// ... elsewhere in code
if (isNumericalString(someVal)) {
someVal+= 5; // No need to cast to number because IDE already knows it's a number
}
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以让 TypeScript 变得智能并知道“100”是有效的数字字符串,但“Foobar”不是,我会特别喜欢它,但我愿意满足于能够欺骗 IDE认为所有字符串在分配为 NumericStrings 时都是数字,并处理其后果,因为我是唯一一个积极从事该项目的人。
我很感谢对此的任何帮助,我觉得我为此损失了一个小时/半天的时间,如果可以的话,我很想提高我的生产力。
Ash*_*ahi 20
这里数字和字符串作为数字都将被接受,但任何其他字符串都不能被接受
type NumericalString = `${number}` | number;
let str: NumericalString = "120"; // OK
let num: NumericalString = 120; // OK
let someOtherStr: NumericalString = "Any Thing Than Num"; // Show error by IDE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |