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 PartialPointX {x:number;};
interface Point extends PartialPointX {y:number;};
type PartialPointX = {x:number;};
type Point = PartialPointX & {y:number;};
type PartialPointX = {x:number;};
interface Point extends PartialPointX {y:number;};
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;
type TD = TA & TB;