typescript进阶


typescript进阶

interface和type


interface

同名的interface自动聚合,也可跟同名的class自动聚合。

只能表示 object class function 类型

type 

不仅仅能够表示  object class function 。

不能重名,扩展已有的type 需要创建新的type

支持复杂的类型操作。

都可以用来表示 object 或 function , 只是语法略有不同。
interface Point{
  x:number;
  y:number;
}

interface SetPoint{
  (x: number, y: number): void;
}

type Point = {
  x: number;
  y: number;
}

type SetPoint = (x: number,y: number) => void;
与interface不同的是
interface不同的是,type还可以来表示其他类型,比如基本数据类型、元素,并集等。

type Name = string;

type PartialPointX = {x:number;};

type PartialPointY = {y:number;};

type PartialPoint = PartialPointX | PartialPointY;

type Data = [number,string,boolean];
Extend

都可以被继承,只是语法略有不同,**注意interface与type并不互斥。

// interface extends interface

interface PartialPointX {x:number;};

interface Point extends PartialPointX {y:number;};

// type extends type

type PartialPointX = {x:number;};

type Point = PartialPointX & {y:number;};

// interface extends type

type PartialPointX = {x:number;};

interface Point extends PartialPointX {y:number;};

// type extends interface

interface ParticalPointX = {x:number;};

type Point = ParticalPointX & {y:number};
only interface can

开发中有时会有interface能表达,但type做不到的情况 => 给函数挂载属性。

interface FuncWithAttachment {
  (param: string): boolean;
  someProperty: number;
}

const testFunc: FuncWithAttachment = function(param: string) {
  return param.indexOf("Neal") > -1;
};
& 和 | 操作符
这里 &|  并非位运算符,& 表示必须满足所有, | 表示只需满足一个。

interface TA{
  a:string;
  b:string;
}

type TB{
  b:number;
  c:number [];
}

type TC = TA | TB; // TC 的 key,包含 ab 或者 bc 即可,当然,包含 bac 也可以
type TD = TA & TB; // TD 的 可以,必须包含 abc

文章作者: KarlFranz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 reprint policy. If reproduced, please indicate source KarlFranz !
评论
  目录