[英]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.