TypeScript 初识 - 高级类型

联合类型

联合类型表示一个值可以时集中类型之一,使用 | 进行分隔每种类行。

联合类型的变量在被赋值的时候,根据类型推论的规则,推断出一个类型。

联合类型的变量当被推断出类型后,就变得和正常声明的变量一样:

let ddd: string | number;
ddd = 'hello world';
// ddd被推断成了 string,访问 length 属性不会报错
console.log(ddd.length);
ddd = 255;
// 报错 ddd 被推断成了 number,访问 length 属性时就报错了
console.log(ddd.length);

联合类型的变量没有被推断出类型时,这个变量只能访问联合类型中所有类型共有的属性:

function func(name: string, age: string | number) {
    // Error,Property 'length' does not exist on type 'string | number'.Property 'length' does not exist on type 'number'.
    console.log(age.length);
    // 编译通过
    console.log(age.toString());
}

交叉类型

交叉类型是将多个类型合并为一个类型,交叉类型的变量拥有所有类型的所有属性、方法,使用 & 进行合并类型:

function extend<T, U>(first: T, second: U): T & U {
    const result = <T & U>{};
    for (let id in first) {
        (<T>result)[id] = first[id];
    }
    for (let id in second) {
        if (!result.hasOwnProperty(id)) {
            (<U>result)[id] = second[id];
        }
    }

    return result;
}

const x = extend({ a: 'hello' }, { b: 42 });

// 现在 x 拥有了 a 属性与 b 属性
const a = x.a;
const b = x.b;
    原文作者:fatedeity
    原文地址: https://segmentfault.com/a/1190000020076402
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞