Eh bien, il y a une différence entre la chaîne des enums et littérale de types dans le transpiled code.
Comparer le Tapuscrit Code
// with a String Literal Type
type MyKeyType1 = 'foo' | 'bar' | 'baz';
// or with a String Enum
enum MyKeyType2 {
FOO = 'foo',
BAR = 'bar',
BAZ = 'baz'
}
Avec le transpiled JavaScript Code
// or with a String Enum
var MyKeyType2;
(function (MyKeyType2) {
MyKeyType2["FOO"] = "foo";
MyKeyType2["BAR"] = "bar";
MyKeyType2["BAZ"] = "baz";
})(MyKeyType2 || (MyKeyType2 = {}));
Ce que vous pouvez voir, il n'y a pas de code généré pour l'un littéral de chaîne. Parce que les Tapuscrits Transpiler est seulement à l'aide de sécurité de type tout transpiling. Au moment de l'exécution des littéraux de chaîne sont "générés de muets" les chaînes. Pas de références entre la définition de la littéralité et les usages.
Donc, il y a une troisième alternative appelée const enum
Regardez cette
// with a String Literal Type
type MyKeyType1 = 'foo' | 'bar' | 'baz';
// or with a String Enum
enum MyKeyType2 {
FOO = 'foo',
BAR = 'bar',
BAZ = 'baz'
}
// or with a Const String Enum
const enum MyKeyType3 {
FOO = 'foo',
BAR = 'bar',
BAZ = 'baz'
}
var a : MyKeyType1 = "bar"
var b: MyKeyType2 = MyKeyType2.BAR
var c: MyKeyType3 = MyKeyType3.BAR
sera transpiled à
// or with a String Enum
var MyKeyType2;
(function (MyKeyType2) {
MyKeyType2["FOO"] = "foo";
MyKeyType2["BAR"] = "bar";
MyKeyType2["BAZ"] = "baz";
})(MyKeyType2 || (MyKeyType2 = {}));
var a = "bar";
var b = MyKeyType2.BAR;
var c = "bar" /* BAR */;
Pour plus de jouer, vous pouvez consulter ce lien
Je préfère la const enum cas, car de la façon la plus pratique de taper Enum.De la valeur. La machine fera le reste pour moi d'obtenir les performances les plus élevées lors de la transpiling.