typescript 学习日志
1. 属性名前面加上 readonly
关键字,表示这个属性是只读属性,不能修改。typescript 里面的readonly 是真的在初始化的时候确定其值不可改变,而非C#里面一样的其实是一个计算属性。
注意,如果属性值是一个对象,readonly
修饰符并不禁止修改该对象的属性,只是禁止完全替换掉该对象。——这个跟我的理解完全一致。
2. 如果需要扩展Window 或 Document,需要通过 interface ,这个也算是interface 的一个用处了:
举例来说,Web 网页开发经常会对window
对象和document
对象添加自定义属性,但是 TypeScript 会报错,因为原始定义没有这些属性。解决方法就是把自定义属性写成 interface,合并进原始定义。
其实我扩展Array、String等等对象,也是这样来的 —— 我早就开始这样使用了。
interface Document {
foo: string;
}
document.foo = 'hello';
3. typescript 不但支持重载,结合它的语法规则,而且在重载的使用中还可能更好的完成开发者的意图:
4.class
命令也有类似作用,通过定义一个类,同时定义一个对象类型。但是,它会创造一个值,编译后依然存在。如果只是单纯想要一个类型,应该使用type
或interface
。
5.
interface 与 type 的区别有下面几点。
(1)type
能够表示非对象类型,而interface
只能表示对象类型(包括数组、函数等)。
(2)interface
可以继承其他类型,type
不支持继承。
6.interface 可以继承 type。type 也可以继承 interface。
7.同名interface
会自动合并,同名type
则会报错。也就是说,TypeScript 不允许使用type
多次定义同一个类型。
8.this
关键字只能用于interface
。 —— 【西西 2024-03-27 114139】这一点很重要:
9.如果有复杂的类型运算,那么没有其他选择只能使用type
;一般情况下,interface
灵活性比较高,便于扩充类型或自动合并,建议优先使用。
10.interface 只是指定检查条件,如果不满足这些条件就会报错。它并不能代替 class 自身的类型声明。
11.子类不能定义父类私有成员的同名成员。
12.
13.
14.
15.
16.