首页 ›  文章

TypeScript 初识 - 高级类型

2019-08-15

联合类型

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

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

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

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;
原文链接:segmentfault.com

上一篇:从输入URL到页面可交互的过程探究之一:从服务端到客户端
下一篇:JS 中创建自定义排序方法
相关文章

首次访问,人机识别验证

扫描下方二维码回复 1024 获取验证码,验证完毕后 永久 无须验证

操作步骤:[打开微信]->[扫描上侧二维码]->[关注 FedJavaScript 的微信] 输入 1024 获取验证码

验证码有误,请重新输入