[英]Why is it possible to have both numeric and string index signatures for an interface in TypeScript?
[英]Is it possible to have a numeric string type in TypeScript?
更新:我现在意识到我忽略了在运行时如何处理字符串,所以 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
}
如果 TypeScript 有办法变得聪明并且知道“100”是一个有效的数字字符串,但“Foobar”不是,我会特别喜欢它,但我愿意接受能够欺骗 IDE 进入考虑到我是唯一一个积极参与这个项目的人,认为所有字符串在分配为 NumericStrings 时都是数字并处理其后果。
我很感激这方面的任何帮助,我觉得我为此浪费了一个小时/一个半天的时间,如果可以的话,我很想提高我的工作效率。
这里将接受数字和字符串作为数字,但不能接受任何其他字符串
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
我假设您想重载+=
运算符。 目前 TypeScript 不支持此功能。 据我所知,您必须手动投射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.