流动的类型

    这是因为 TypeScript 的设计目的之一是让你无缝与像 JavaScript 这类高动态的语言一起工作。在这里,我们介绍一些在 TypeScript 中使用移动类型的技巧。

    关键的动机:当你改变了其中一个时,其他相关的会自动更新,并且当有事情变糟糕时,你会得到一个有好的提示,就好像一个被精心设计过的约束系统。

    如果你想移动一个类,你可能会想要做以下事情:

    1. namespace importing {
    2. export class Foo {}
    3. }
    4. let bar: Bar; // ok

    这个 技巧,仅适合于类型和变量。

    你可以通过 typeof 操作符在类型注解中使用变量。这允许你告诉编译器,一个变量的类型与其他类型相同,如下所示:

    与捕获变量的类型相似,你仅仅是需要声明一个变量用来捕获到的类型:

    1. class Foo {
    2. foo: number; // 我们想要捕获的类型
    3. }
    4. declare let _foo: Foo;
    5. // 与之前做法相同
    6. let bar: typeof _foo.foo;

    在这个例子里,bar 有字面量类型 Hello World,我们在字面量类型章节已经深入讨论。

    操作符能让你捕获一个类型的键。例如,你可以使用它来捕获变量的键名称,在通过使用 typeof 来获取类型之后:

    1. red: 'red',
    2. blue: 'blue'
    3. };
    4. type Colors = keyof typeof colors;
    5. let color: Colors; // color 的类型是 'red' | 'blue'
    6. color = 'red'; // ok
    7. color = 'blue'; // ok

    这允许你很容易地拥有像字符串枚举+常量这样的类型,如上例所示。