TypeScript:高级类型
class类型
class类型,和Java差不多。
class Person {
name: string;
age: number = 0;
}
let person = new Person();
构造函数
class Person {
name: string;
age: number = 0;
constructor(name: string, age: number){
this.name = name;
this.age = age;
}
}
let person = new Person('zhangsan',19);
类实现接口
interface Person{
sayHell(content: string): string;
}
class PersonImpl implements Person {
sayHell(content: string): string {
return content;
}
}
方法修饰符
TS也提供了如Java一样的方法修饰符:
- public
- protected
- privated
class PersonImpl implements Person {
public sayHell(content: string): string {
return content;
}
protected sayHell2(content: string): string {
return content;
}
private sayHell3(content: string): string {
return content;
}
}
readonly修饰属性
加了readonly属性,相当提供了get方法,没提供set方法
class Person {
readonly name: string;
//构造可以赋值
constructor(name: string) {
this.name = name;
}
}
let person = new Person('zhangsan');
//不能赋值
person.name = "John";
类型兼容性问题
类型兼容性,类型系统分为两种:结构型和标明型
标明型:两个没有任何关系的类,是不能进行兼容赋值的。比如说 A类 和 B类,A = B是会报错的;如Java,C++都属于标明型
结构型:两个没有任何关系的类,如果内部属性和方法完全一致(默认值可不用一致)或者说其中一个类完全兼容另一个类属性和方法,是可兼容赋值的。 A=B可成立
TS是结构型,我举个例子吧:
class Person1 {
name: string = "John2";
}
class Person2 {
name: string = "John";
age: number = 18;
}
let person1 = new Person1();
let person2 = new Person2();
person1 = person2;
可以这里理解,如果Person1有的,Person2也有并且还有Person1没有的,那Person2相当Person1的子类。
PS:interface和class都有这个结构型的特性