繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM