更新:我现在意识到我忽视了字符串在运行时的处理方式,所以100 + 5实际上不会像我期望的那样工作。我会保留这个问题,看看是否有更好的解决方案,而不是类型转换或类型定义。
我一直在寻找答案,所以如果这是一个重复的问题,我很抱歉,但我想知道是否可以为数字字符串定义一个TypeScript类型,该类型接受字符串或值,然后指示它将始终是一个数字?我需要发送数据到许多不同的系统中,不幸的是,我无法控制模型定义(它们由拥有数据的各种团队控制)。这使我不得不将所有字符串转换为数字进行计算,然后再将其转换回字符串以使IDE满意,并导致了大量额外的工作。
如果我能做类似以下的事情,那就太好了,这将有助于减少冗余工作量:
我希望TypeScript能够聪明地知道“100”是一个有效的数字字符串,但“Foobar”不是。即使我只能欺骗IDE将所有字符串都视为数字字符串,并处理此举的后果,我也会满足。因为我是这个项目中唯一积极工作的人员。非常感谢您的帮助,我觉得我每天会因此失去一个小时/一个半小时,如果可以提高生产力,那就太好了。
我一直在寻找答案,所以如果这是一个重复的问题,我很抱歉,但我想知道是否可以为数字字符串定义一个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将所有字符串都视为数字字符串,并处理此举的后果,我也会满足。因为我是这个项目中唯一积极工作的人员。非常感谢您的帮助,我觉得我每天会因此失去一个小时/一个半小时,如果可以提高生产力,那就太好了。