TypeScript基础部分总结

114 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、在声明interface后,当我们给函数的参数指定好interface,ts检查的是:

(1) 必须包含 接口指定的属性且类型正确

(2)不能包含接口定义外的属性名

(3)非必选属性如果存在则检查其类型是否正确。

逃避检查的方式

(1)使用类型断言 (someValue as XXX)|| <类型>someValue

(2) 添加一个字符串索引签名:

interface SquareConfig { color?: string; width?: number; [propName: string]: any; }

(3) 将对象赋值给另一个变量,这个变量不会经过额外的属性检查,在传递给函数是传入这个变量。

let squareOptions = { colour: "red", width: 100 }; 
let mySquare = createSquare(squareOptions);

2、interface 和 type的区别。 type可以声明基础数据类型

3、声明可索引类型

interface Array { [index: number] : number }

4、混合类型

5、派生类包含了一个构造函数,它必须调用super(),它会执行基类的构造函数。 而且,在构造函数里访问this的属性之前,我们一定要调用super()。 这个是TypeScript强制执行的一条重要规则。

6、class之间的继承(extends)会继承基类的所有属性(public、private、protected),如果遇到相同的方法就发生了重写。

7、 private只能在类的内部使用,除此之外在哪里都不能用 class.name 🙅 || 在派生类中访问也是不可以的。

8、protected属性可以在派生类内部继承时使用,但是不可以在类实例化后直接访问/

9、简单来说:继承就是可以继承基类中所有的内容,在派生类中的构造函数中需要先使用super()先来初始化基类的构造函数,在访问this。如果基类中有私有属性那么只能在基类的内部使用,基类实例不能访问,在派生类中也不可以访问。如果基类中有protected属性,基类实例不可以访问,在派生类内部可以访问,派生类的实例也不可以直接访问。如果构造函数是protected声明,那么他不能够直接实例化可以在继承它时在派生类中实例化他。

10、静态属性 static关键字来声明静态属性。 当类没有实例化的时候我们仍然可以访问的属性。 在类的内部访问 类名.属性名

class Grid {
 static origin = {x: 0, y: 0};
 calculateDistanceFromOrigin(point: {x: number; y: number;}) {
  let xDist = (point.x - Grid.origin.x); 
  let yDist = (point.y - Grid.origin.y); 
  return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
  } 
  constructor (public scale: number) { }
 } 
  let grid1 = new Grid(1.0); 
  let grid2 = new Grid(5.0);   
  console.log(grid1.calculateDistanceFromOrigin({x: 10, y: 10})); 
  console.log(grid2.calculateDistanceFromOrigin({x: 10, y: 10}));

11、 声明抽象类:abstract关键字