2017-07-21 6 views
2

Ich muss einen Typ erstellen, der ein einzelnes Zeichen ist.Stringlänge im Typ

type Symbol = string 

Allerdings bin ich nicht in der Lage, dies zu tun. Der nächstgelegene ich habe tat:

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

Chars ist ein Objekt, in dem jeder einzelne Schlüssel charcter auf der Tastatur sind, dann mache ich eine Enumeration aus ihm heraus. Dies ist jedoch nicht gut, da es nicht wie bei fremden Tastaturen alle Zeichen enthält.

Antwort

2

Leider gibt es keine Möglichkeit, in Fluss die Art von Strings der Länge 1.

Aber ein „einzelnes Zeichen“ zu beschreiben, ist wahrscheinlich nicht das, was man so wie man will. Zumindest nicht im genauen Sinne. In JavaScript bedeutet ein String "Zeichen" eigentlich einen UTF-16-Codepoint. Viele Codepunkte sind nicht druckbar oder nur als Modifikator für ein anderes Zeichen sinnvoll. Einige "Zeichen" (z. B. ein Haufen Puh) werden tatsächlich als 2 Zeichen in Javascript betrachtet. Ein weniger albernes Beispiel ist \u0061\u0332, das als "a̲" angezeigt wird. Wenn Sie versuchen, dies richtig zu handhaben, werden Sie herausfinden, wie Sie eine Zeichenkette in ein Array von Graphenclustern konvertieren können.

Ich werde nicht mehr darüber reden, weil Sie fast sicher nicht diese Frage gestellt haben, um über Zeichenkodierungen zu lesen. Mein Punkt ist, selbst wenn Sie in der Lage waren, den gewünschten Typ zu definieren, ist es sowieso nicht genau richtig. Selbst wenn Sie Unicode vergessen haben, wollten Sie wirklich "\r" oder eine vertikale Registerkarte als gültige Werte?

Vorausgesetzt, dass Sie trotzdem ungültige Werte zulassen würden, ist es wahrscheinlich die beste Lösung, die Länge zu ignorieren und die Validierung zu schreiben, wo sie benötigt wird. Alternativ wäre es eigentlich nicht zu belastende eine ENUM mit einer Liste der < 100 Werte wollen Sie eigentlich zu erstellen:

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

Danke Peter für eine solche indepth Antwort! Ich liebe das Beispiel hahaha! Die Kodierungssprache war sehr informativ, ich schätze es sehr und wünschte, ich könnte mehr als +1 machen. – ystal

Verwandte Themen