当改变一个类型时,其他相关的类型自动更新,ts这么设计是为了更好的与js的动态性相互结合。
捕获变量的类型
通过 typeof 操作符可以捕获到变量的类型(不适用于常量)
let foo = 123;
let bar: typeof foo; // 'bar' 类型与 'foo' 类型相同(在这里是: 'number')
bar = 456; // ok
捕获类成员的类型
声明一个变量,表示要捕获的类型,然后使用typeof
捕获这个类型。
class Foo {
foo: number;
}
declare let _foo: Foo;
let bar: typeof _foo.foo; // number 类型
捕获字符串类型
使用常量声明一个类型,然后使用typeof
捕获这个常量类型。
const foo = 'Hello World';
// 使用一个捕获的类型
let bar: typeof foo;
bar = 'Hello World'; // ok
捕获键名
typeof
用于捕获变量的类型,keyof
用于捕获类型的键名(注意是类型的键名),两者结合可以实现字符串枚举的效果。
const colors = {
red: 'red',
blue: 'blue'
};
type Colors = keyof typeof colors; // 先使用typeof获取到类型 { red: string, blue: string },然后使用keyof获取到键名 'red' | 'blue'
let color: Colors = 'red'; // OK
color = 'blue'; // OK
color = 'green'; // ERROR