enum ColorsEnum { white = '#ffffff', black = '#000000', } 这里ColorEnum 在运行时作为一个对象存在,不是一个类型,所以,我们需要一起使用 keyof typeof这两个操作符,如下代码所示: type Colors = keyof typeof ColorsEnum let colorLiteral: Colors colorLiteral = "#ffffff" // OK colorLiteral =...
type Preferences = typeof preferences; // type '{language: 'EN''; theme: string; }' 因为第二个typeof preferences在类型表达式中,它实际上是 TypeScript 自己的typeof被调用,而不是 JavaScript。 类型的键 因为keyof是一个 TypeScript 概念,我们将调用 TypeScript 的版本typeof。 keyof typeof将推断 jav...
然后通过 keyof 和 typeof 获取到对象的值,并形成联合类型 这段代码删掉静态类型依然能够正常运行。除了实现上稍微有点复杂以外,是一个很不错的方案 不管是union type还是object as const,其实都是对 enum 的吹毛求疵 如果项目不追求极致的编译优化,大可以放心使用 enum;如果不需要反向映射,使用 const enum 或许...
type Direction = typeof ODirection[keyof typeof ODirection]; function run(dir: Direction) {} walk(EDirection.Left); run(ODirection.Right); 与TypeScript 的enum相比,支持这种格式的最大论据是它使你的代码库与 JavaScript 的状态保持一致,并且当/如果枚举被添加到 JavaScript,然后你可以转向其他语法。
四、keyof 与 typeof 操作符 typeof 操作符用于获取变量的类型。因此这个操作符的后面接的始终是一个变量,且需要运用到类型定义当中。为了方便大家理解,我们来举一个具体的示例: typePerson= {name:string;age:number; }letman:Person= {name:"Semlinker",age:30}typeHuman=typeofman; ...
{ 1: 'one', 2: 'two', 3: 'three' } type k1 = keyof typeof obj; // typeof obj 的结果为 { // 1: string; // 2: string; // 3: string; // } // type k1 = 1 | 2 | 3 enum Direction { Up = 1, Down, Left, Right, } type Result = keyof typeof Direction; // ...
Enum[Enum["B"] = 2] = "A"; })(Enum || (Enum = {})); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 这时可以考虑使用const enum来优化编译结果,它不会编译未使用的枚举项,而且不会生成对象,在编译后只会保留枚举值
问在TypeScript中"keyof typeof“是什么意思?EN在TypeScript中,枚举在编译时用作类型,以实现常量的...
原因:keyof关键字只能用于对象类型,因为它需要获取对象的键。对于非对象类型(如基本类型、枚举等),它们没有键的概念。 解决方法:如果你需要对非对象类型进行操作,可以考虑使用其他方法,例如使用typeof来获取类型的字符串表示。 代码语言:txt 复制 enum Color { Red, Green, Blue } type ColorType = typeof Color...
enum Color { Red, // 0 Green, // 1 Blue // 2 } // 编译后 let Color = { Red: 0, Green: 1, Blue: 2 }; Enum结构编译后是一个对象,所以不能有同名的对象、函数和类等。 2. Enum成员的值 Enum 成员默认不必赋值,系统会从零开始逐一递增,按照顺序为每个成员赋值,比如0、1、2……也可以为...