TypeScript-初识-高级类型

11次阅读

共计 826 个字符,预计需要花费 3 分钟才能阅读完成。

联合类型

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

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

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

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;

正文完
 0