TypeScript 基础语法入门(上)https://developer.aliyun.com/article/1392243
传参错误
对象缺少属性
属性只读
强校验
对于字面量形式的对象参数会进行强校验
对于直接传递的变量则不会
解决方式
可以动态添加一个属性名是string类型,属性值是any的属性。
属性和方法都可以添加
类也可以应用接口
接口还可以继承
函数接口
tsc --init
会生成一个tsconfig.json
文件
把ts文件编译成为原生js
interface
接口只是帮助我们校验的工具,编译为js之后会消失。
输入tsc demo.ts
类的定义和继承
类的定义
类的继承
类的重写
类的访问类型和构造器
private, protected, public 访问类型
public允许我在类的内外被调用
private允许在类内被使用
protected允许在类内及继承的子类中使用
constructor
传统写法
简化写法
class Parent { // public name:string; constructor(public name:string) { // this.name = name }; } const p = new Parent('name')
继承时要调用父类的构造器方法
class Parent { public name: string; constructor(name: string) { this.name = name; } } class Son extends Parent { constructor(public age: number) { super("name"); } } const s = new Son(18); console.log(s.age); // 18 console.log(s.name); // name
静态属性、Setter、Getter
Setter、Getter
class Parent { constructor(private _name: string) {} get name() { return this._name; } set name(name: string) { const realName = name.split(" ")[0]; this._name = realName; } } const p = new Parent("jack"); console.log(p.name); // jack p.name = "Tom"; console.log(p.name); // Tom
创建一个唯一的实例
class Demo { private static instance: Demo; private constructor(public name: string) {} static getInstance() { if (!this.instance) { this.instance = new Demo("jack"); } return this.instance; } } const demo1 = Demo.getInstance(); const demo2 = Demo.getInstance(); console.log(demo1.name); // jack console.log(demo2.name); // jack
注意
这里的getInstance是静态方法,在类上面。
demo1和demo2是同一个实例对象
抽象类
readonly
class Parent { public readonly name: string; constructor(name: string) { this.name = name; } } const p = new Parent("jack"); // p.name = 'tom' 不可以 console.log(p.name); // jack
抽象类
abstract class Geom { width: number; getType() { return "Gemo"; } abstract getArea(): number; } class Circle extends Geom { getArea() { return 123; }
interface的继承
interface Person { name: string; } interface Teacher extends Person { age: number; } interface Student extends Person { age: number; } const teacher = { name: "dell", }; const student = { name: "de", age: 18, }; const getName = (user: Person) => { console.log(user.name); }; getName(teacher); // dell getName(student); // de