簡體   English   中英

如何使用TypeScript的功能檢查字符串中的字母是否大寫?

[英]How can I check if a letter in a string is uppercase using the power of TypeScript?

我的問題很簡短。 我是TypeScript的新手,一直到處搜索,但沒有找到答案。

我有用C#編寫的代碼

private bool MaskValidateChar(KeyPressEventArgs e, int index)
{
    string c = e.KeyChar.ToString();
    if (Char.IsUpper(c[0])) //Need to this with TypeScript :-\
    {
        //Do Something....
    }
}

當我將上述代碼轉換為Type腳本時,我可以簡單地編寫類似if (c[0] == c[0].toUpperCase())

我只需要知道Typescript中是否有內置方法來檢查給定字符是否為大寫。 我在互聯網上找不到這樣的東西,但我對此表示懷疑。

請指教。

不能char.IsUpper/char.IsLower (TypeScript編譯為JavaScript)沒有類似於char.IsUpper/char.IsLower的內置方法。 您將必須進行比較,例如:

c[0] === c[0].toUpperCase() // c[0] is uppercase
c[0] === c[0].toLowerCase() // c[0] is lowercase

是的,您可以嘗試使用linq

if (yourString.Any(char.IsUpper) &&
    yourString.Any(char.IsLower))

擴展@Saravana的答案,TypeScript的類型檢查在運行時不存在,而是在編輯/轉換時進行的檢查。 這意味着不能僅根據變量的類型或內容自動引發異常。 缺少功能會導致錯誤,但是僅當您使用要針對的變量類型專用的功能時(該功能不專門用於大寫/小寫字符串),該功能才起作用。

選項? 好吧,如果您知道要處理一組特定的可能字符串,則可以設置一個type

type UCDBOperation = "INSERT" | "DELETE";
type LCDBOperation = "insert" | "delete";

function DoDBOperation(operation: UCDBOperation): void { ... }

const someUCOperation: UCDBOperation = ...;
const someLCOperation: LCDBOperation = ...;

DoDBOperation("INSERT");        // no error!
DoDBOperation(someUCOperation); // no error!
DoDBOperation("insert");        // type error
DoDBOperation(someLCOperation); // type error
DoDBOperation("fakeoperation"); // type error
DoDBOperation("FAKEOPERATION"); // type error

如果您只關心單個字母字符,則可以更進一步:

type UCAlpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z";

function printUpperCaseLetter(letter: UCAlpha): void {
  console.log(letter);
}

printUpperCaseLetter("A");     // no error!
printUpperCaseLetter("a");     // type error
printUpperCaseLetter("hello"); // type error
printUpperCaseLetter("WORLD"); // type error

請注意用戶生成的字符串 在運行時生成的任何數據都不會對此類型進行檢查:

// Typescript has no idea what the content
// of #SomeTextField is since that data
// wasn't available at transpile-time
DoDBOperation(document.querySelector("#SomeTextField").textContent);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM