2017-07-21 62 views
2

我需要創建一個單個字符的類型。類型中的字符串長度

type Symbol = string 

但是我無法做到這一點。最近我得到的是這樣做的:

const CHARS = { a:1, b:1, c:1, and so on } 
type Symbol = $Keys<typeof CHARS>; 

個字符是一個對象,其中鍵是鍵盤上的每一個字符內,然後我做一個枚舉出來。但這並不好,因爲它不會像所有外鍵盤一樣佔用所有字符。

回答

2

不幸的是沒有辦法在流程描述長度1

但「單個字符」可能的字符串類型是不是你想要的呢。至少不是確切的意義。在JavaScript中,字符串「字符」實際上是指UTF-16碼點。許多代碼點不可打印,或者僅作爲對另一個字符的修飾符纔有意義。一些「字符」(例如一堆便便)在Javascript中實際上被認爲是2個字符。一個不太愚蠢的例子是\u0061\u0332,其顯示爲"a̲"。如果你試圖正確處理這個問題,你會發現自己試圖找出如何將一個字符串轉換成你將要發現的數組稱爲字形集羣。

我不會再討論這個問題了,因爲你幾乎肯定沒有問這個問題來閱讀字符編碼。我的觀點是,即使你能夠定義你想要的類型,反正也不完全正確。甚至忘記Unicode,你真的想要"\r"或垂直製表符是有效的值嗎?

鑑於您無論如何都會允許無效值,最好的解決方案可能是忽略長度並在需要時寫入驗證。或者它實際上不會繁重與你真正想要的< 100值的列表中創建一個枚舉:

enum Symbol = 'A' | 'B' | 'C' | 'D' .... 
+1

謝謝彼得這樣一個深入的答覆!我喜歡這個例子哈哈哈!編碼語音非常豐富,我非常感謝它,希望我能做更多的+1。 – ystal