簡體   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