TypeScript基础入门 - 类型兼容性 - 枚举和类

{app.params.name}}{app.params.name}}{app.params.name}}

项目实践仓库

https://github.com/durban89/typescript_demo.git
tag: 1.4.0

为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。

npm install -D ts-node

后面自己在练习的时候可以这样使用

npx ts-node 脚本路径

枚举

枚举类型与数字类型兼容,并且数字类型与枚举类型兼容。不同枚举类型之间是不兼容的。比如,

enum Status {
    Ready,
    Waiting,
};

enum Color {
    Color1,
    Color2,
    Color3,
};

let s = Status.Ready;
s = Color.Color1;

运行后会有类似如下的错误提示

⨯ Unable to compile TypeScript:
src/type_compatibility_2.ts(13,1): error TS2322: Type 'Color.Color1' is not assignable to type 'Status'.

类与对象字面量和接口差不多,但有一点不同:类有静态部分和实例部分的类型。 比较两个类类型的对象时,只有实例的成员会被比较。 静态成员和构造函数不在比较的范围内。如下实例演示

class PersonType {
    name: string;
    constructor(name: string, age: number) {}
}

class AnimalType {
    name: string;
    constructor (name: string) {}
}

let PT: PersonType = new PersonType('a', 1);
let AT: AnimalType = new AnimalType('a');

AT = PT
PT = AT


当我们运行这段代码的时候,会发现没有报任何错误

类的私有成员

类中的私有成员和受保护成员会影响其兼容性。检查类的实例是否兼容时,如果目标类型包含私有成员,则源类型还必须包含源自同一类的私有成员。同样,这同样适用于具有受保护成员的实例。这允许类与其超类兼容,但不允许使用来自不同继承层次结构的类,否则这些类具有相同的形状。


本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.4.1


 

版权声明

durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。

本文永久链接: https://www.gowhich.com/blog/916


版权声明

durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。

本文永久链接: https://www.gowhich.com/blog/916

comments powered by Disqus