TypeScript基础--接口

接口契约

TypeScript的核心原则之一是对值所具有的结构进行类型检查。它有时被称作“结构性子类型化”或“鸭式变型法”。
在TypeScript中,接口的作用就是为这些类命名和为你的代码或第三方代码定义契约。
实例如下:

interface LabelledValue {
  label: string;
}

function printLabel(labelledObj: LabelledValue) {
  console.log(labelledObj.label);
}

let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);

上面的代码中,接口LabelledValue就像是一个契约,我们只会去关注传给printLabel的值的外形。
还有一点值得提的是,类型检查器不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。

接口可选属性

带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。

interface SquareConfig {
  color?: string;
  width?: number;
}

接口只读属性

一些对象属性只能在对象刚创建的时候修改其值。这时候可以在属性前面用readonly来指定只读属性:

interface Point {
    readonly x: number;
    readonly y: number;
}

TypeScript具有ReadonlyArray<T>类型,它与Array<T>相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改.

readonly VS const

const表示不可变的常量,
readonly表示属性。
readonly修饰的属性必须在声明时或构造函数里被初始化。

实现接口

与C#或Java里接口的基本作用一样,TypeScript也能够用它来明确的强制一个类去符合某种契约。

继承接口

和类一样,接口也可以相互继承。这让我们能够从一个接口里复制成员到另一个接口里,可以灵活的将接口分割到可重用的模块里。

interface Shape {
    color: string;
}

interface PenStroke {
    penWidth: number;
}

interface Square extends Shape, PenStroke {
    sideLength: number;
}

let square = <Square>{};
square.color = "blue";
square.sideLength = 10;
square.penWidth = 5.0;

接口继承类

  • 接口继承类时,它会继承类的成员,但不包括类的实现。就好像接口声明了所有类中的成员,但并没有提供具体的实现。
  • 接口同样会继承到类的private和protected成员。(这意味这当接口继承了一个拥有private或protected成员的时候,这个接口类型只能被这个类或其子类所实现)
class Control {
    private state: any;
}
interface SelectableControl extends Control {
    select(): void;
}
// Error: Property 'state' is missing in type 'Image'.
class Image implements SelectableControl {
    select() { }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,967评论 19 139
  • 本文首发在我的个人博客:http://muyunyun.cn/posts/66a54fc2/文中的案例代码已经上传...
    牧云云阅读 908评论 1 5
  • 注意,数据类型大小写不同。如Boolean是构造函数而boolean是基本类型,如Object包含数组,而obje...
    李霖弢阅读 837评论 0 1
  • 文/风高秋月白 樊晓梨篇 我爱这座我生活了十五年的城市,却独独更衷情这座城市里的52路公交车。 它是双层的,周身涂...
    风高秋月白阅读 689评论 36 34
  • C语言中函数不是变量,单可以定义指向函数的指针,这种类型的指针可以被赋值存放在数组中,传递给函数以及作为函数的返回...
    Hy_Slin阅读 242评论 0 0