暮年|细数这些年被困扰过的 TS 问题( 五 )
继续阅读:是时候表演真正的技术了 - TS 分身之术
六、interfaces 与 type 之间有什么区别6.1 Objects/Functions接口和类型别名都可以用来描述对象的形状或函数签名:
接口
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;
6.2 Other Types与接口类型不一样 , 类型别名可以用于一些其他类型 , 比如原始类型、联合类型和元组:
// primitivetype Name = string;// objecttype PartialPointX = { x: number; };type PartialPointY = { y: number; };// uniontype PartialPoint = PartialPointX | PartialPointY;// tupletype Data = http://kandian.youth.cn/index/[number, string];
6.3 Extend接口和类型别名都能够被扩展 , 但语法有所不同 。 此外 , 接口和类型别名不是互斥的 。 接口可以扩展类型别名 , 而反过来是不行的 。
Interface extends interface
【暮年|细数这些年被困扰过的 TS 问题】interface PartialPointX { x: number; }interface Point extends PartialPointX {y: number; }
Type alias extends type alias
type PartialPointX = { x: number; };type Point = PartialPointX};
Interface extends type alias
type PartialPointX = { x: number; };interface Point extends PartialPointX { y: number; }
Type alias extends interface
interface PartialPointX { x: number; }type Point = PartialPointX};
6.4 Implements类可以以相同的方式实现接口或类型别名 , 但类不能实现使用类型别名定义的联合类型:
interface Point {x: number;y: number;}class SomePoint implements Point {x = 1;y = 2;}type Point2 = {x: number;y: number;};class SomePoint2 implements Point2 {x = 1;y = 2;}type PartialPoint = { x: number; } | { y: number; };// A class can only implement an object type or // intersection of object types with statically known members.class SomePartialPoint implements PartialPoint { // Errorx = 1;y = 2;}
6.5 Declaration merging与类型别名不同 , 接口可以定义多次 , 会被自动合并为单个接口 。
interface Point { x: number; }interface Point { y: number; }const point: Point = { x: 1, y: 2 };
七、object, Object 和 {} 之间有什么区别7.1 object 类型object 类型是:TypeScript 2.2 引入的新类型 , 它用于表示非原始类型 。
// node_modules/typescript/lib/lib.es5.d.tsinterface ObjectConstructor {create(o: object | null): any;// ...}const proto = {};Object.create(proto);// OKObject.create(null);// OKObject.create(undefined); // ErrorObject.create(1337);// ErrorObject.create(true);// ErrorObject.create("oops");// Error
7.2 Object 类型Object 类型:它是所有 Object 类的实例的类型 , 它由以下两个接口来定义:
- Object 接口定义了 Object.prototype 原型对象上的属性;
// node_modules/typescript/lib/lib.es5.d.tsinterface Object {constructor: Function;toString(): string;toLocaleString(): string;valueOf(): Object;hasOwnProperty(v: PropertyKey): boolean;isPrototypeOf(v: Object): boolean;propertyIsEnumerable(v: PropertyKey): boolean;}
- 暮年|构建 AI 新生态,“软件定义”摄像机打造机器智能新捷径
- 暮年|唯一一款7英寸5G手机,发布受到质疑,却意外收获好评
- 苹果手机|从多摄到快充,和你聊聊苹果手机这些年“借鉴”安卓的设计
- 暮年|谷歌结合物理模拟与机器学习方法,改进洪水预测速度与准确度
- 暮年|从华为这三位离职牛人高管可以看出,平台往往比能力更重要
- 暮年|126亿!替换华为和中兴代价有点高,这次美国运营商笑不出来了
- |前阿根廷国脚巴桑塔宣布退役:感谢大家这些年的支持和帮助
- 青年|细数阿水在ig所受的委屈?怪不得恩断义绝,带领TES冲击S赛!
- 暮年|漂亮得不像实力派,是想要的荣耀Magic2手机壳
- 海丰|海丰一店主跑到派出所报警,这些年轻人太差劲了