enum ColorsEnum { white = '#ffffff', black = '#000000', } 这里ColorEnum 在运行时作为一个对象存在,不是一个类型,所以,我们需要一起使用 keyof typeof这两个操作符,如下代码所示: type Colors = keyof typeof ColorsEnum let colorLiteral: Colors colorLiteral = "#ffffff" // OK colorLiteral =...
type Direction = typeof ODirection[keyof typeof ODirection]; function run(dir: Direction) {} walk(EDirection.Left); run(ODirection.Right); 与TypeScript 的enum相比,支持这种格式的最大论据是它使你的代码库与 JavaScript 的状态保持一致,并且当/如果枚举被添加到 JavaScript,然后你可以转向其他语法。
因为keyof 是一个 TypeScript 概念,我们将调用 TypeScript 的版本 typeof。 keyof typeof 将推断 javascript 对象的类型并返回其键的联合类型。因为它可以推断出键的确切值,所以它可以返回其 文字类型 的联合,而不仅仅是返回“字符串”。 type PreferenceKeys = keyof typeof preferences; // type '"language" |...
然后通过 keyof 和 typeof 获取到对象的值,并形成联合类型 这段代码删掉静态类型依然能够正常运行。除了实现上稍微有点复杂以外,是一个很不错的方案 不管是union type还是object as const,其实都是对 enum 的吹毛求疵 如果项目不追求极致的编译优化,大可以放心使用 enum;如果不需要反向映射,使用 const enum 或许...
四、keyof 与 typeof 操作符 typeof 操作符用于获取变量的类型。因此这个操作符的后面接的始终是一个变量,且需要运用到类型定义当中。为了方便大家理解,我们来举一个具体的示例: typePerson= {name:string;age:number; }letman:Person= {name:"Semlinker",age:30}typeHuman=typeofman; ...
enum Color { Red, // 0 Green, // 1 Blue // 2 } // 编译后 let Color = { Red: 0, Green: 1, Blue: 2 }; Enum结构编译后是一个对象,所以不能有同名的对象、函数和类等。 2. Enum成员的值 Enum 成员默认不必赋值,系统会从零开始逐一递增,按照顺序为每个成员赋值,比如0、1、2……也可以为...
Enum[Enum["B"] = 2] = "A"; })(Enum || (Enum = {})); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 这时可以考虑使用const enum来优化编译结果,它不会编译未使用的枚举项,而且不会生成对象,在编译后只会保留枚举值
因为enum枚举类型里的key不是单纯的string,number这种类型,枚举的 key 是 string literal 类型。这个时候我们可以用keyof来取出枚举里的所有key值作为type。 typeTYPES=keyoftypeofTYPE; image.png keyof是ts的索引类型操作符,属于ts的高级类型。 对于任何类型T,keyof T得到的类型是T的属性名称字符串字面量类型构成的...
在TypeScript中,枚举在编译时用作类型,以实现常量的类型安全性,但它们在运行时被视为对象。这是因为...
function prop<T extends object, K extends keyof T>(obj: T, key: K) { return obj[key]; } 1. 2. 3. 在以上代码中,我们使用了 TypeScript 的泛型和泛型约束。首先定义了 T 类型并使用 extends 关键字约束该类型必须是 object 类型的子类型,然后使用 keyof 操作符获取 T 类型的所有键,其返回类型是...