keyof
接受一个对象类型并返回一个接受该对象的任何键的类型.
type Point = { x: number; y: number };
type P = keyof Point; // type '"x" || "y"'
const coordinate: P = 'z' // Type '"z"' is not assignable to type '"x" | "y"'.
typeof与TypeScript类型
typeof
在javascript对象上调用时的行为与在typescript类型上调用时的行为不同.
- TypeScript在运行时调用javascript值时使用javascript's typeof,并返回
"undefined", "object", "boolean", "number", "bigint", "string", "symbol", "function"
中的一个
- TypeScript's typeof在类型值上被调用,但在类型表达式中也可以在javascript值上被调用.它还可以推断javascript对象的类型,返回更详细的对象类型.
type Language = 'EN' | 'ES';
const userLanguage: Language = 'EN';
const preferences = { language: userLanguage, theme: 'light' };
console.log(typeof preferences); // "object"
type Preferences = typeof preferences; // type '{language: 'EN''; theme: string; }'
因为第二个typeof preferences
是在类型表达式中,所以实际上调用的是TypeScript自己的typeof
,而不是javascript.
类型键
因为keyof
是一个TypeScript概念,所以我们将其称为TypeScript的verion of typeof
.
类型键
将推断javascript对象的类型,并返回一个类型,该类型是其键的并集.因为它可以推断出键的确切值,所以它可以返回literal types的并集,而不仅仅是返回"string".
type PreferenceKeys = 类型键 preferences; // type '"language" | "theme"'