2017-07-21 18 views
2

1文字のタイプを作成する必要があります。タイプの文字列長さ

type Symbol = string 

ただし、これはできません。私がやっていたしまった最も近い:

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

文字数はキーがキーボード上のすべての単一のcharcterあり、その後、私はそれから列挙型を作るオブジェクトです。これは外国人のキーボードのように、すべての文字を収容していないので、これは良いことではありません。

答えて

2

は、残念ながら、あなたがとにかく欲しいものではありませんフローで長さ1

しかし、おそらく「一文字」の列の型を記述する方法はありません。少なくとも正確な意味ではない。 JavaScriptでは、文字列 "文字"は実際にはUTF-16コードポイントを意味します。多くのコードポイントは印刷可能ではなく、別の文字の修飾語としてのみ意味があります。いくつかの「文字」(例えば、pooの山)は、実際にはJavascriptでは2文字とみなされます。あまり愚かな例は、と表示される\u0061\u0332です。これを正しく処理しようとすると、文字列を、あなたが調べようとしているものの配列に変換する方法を、文面クラスターと呼んでいます。

文字エンコーディングについてこの質問をすることはほとんどありませんでしたので、これ以上は何も話しません。私の要点は、あなたが望むタイプを定義することができたとしても、とにかく正確ではないということです。 Unicodeを忘れても、本当に"\r"または垂直タブが有効な値になりたいですか?

とにかく無効な値を許可するとすれば、最善の解決策は、おそらく長さを無視し、必要に応じて書き込みを書き込むことです。また、それは実際にあなたが実際にしたい< 100個の値のリストを持つ列挙型を作成するためにすぎ面倒ではないでしょう。

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

は、このような徹底的な返事をあなたにピーターをありがとう!私はhahahaの例が大好き!エンコードのスピーチは非常に参考になりました。本当に感謝しています。 – ystal