五、TypeScript 接口

转自:http://www.hubwiz.com/

接口声明

  在TypeScript中,接口是用作约束作用的,在编译成JavaScript的时候,所有的接口都会被擦除掉,因为 JavaScript中并没有接口这一概念。TypeScript中接口是用关键字interface进行声明,例如:

interface LabelledValue { //定义接口

label: string;          //定义属性

}

interface LabelledValue {  //定义接口

label: string;

}

function printLabel(labelledObj: LabelledValue) { //定义函数printLabel,其参数类型为接口类型

document.write(labelledObj.label);

}

var myObj = {size: 10, label: "Size 10 Object"}; //定义含有接口中属性的对象

printLabel(myObj); //调用函数

在上面的例子中,printLabel函数要求传入一个包含一个label的字符串属性。而接口LabelledValue描述了printLabel的所要求的类型对象。它依然代表包含一个label的字符串属性。

可选属性

  有时不是所有定义在interface中的属性都是必须的,typescript中便为我们提供了可选属性。带有可选属性的interface定义和c#语言很相似,以?紧跟变量名后边表示。如下代码:

interface SquareConfig { //定义了两个可选属性

color?: string;

width?: number;

}

function createSquare(config: SquareConfig): {color: string; area: number} {//定义函数

var newSquare = {color: "white", area: 100};

if (config.color) {

newSquare.color = config.color;

}

if (config.width) {

newSquare.area = config.width * config.width;

}

return newSquare;

}

var mySquare = createSquare({color: "black"}); //调用函数,

document.write(mySquare.color);   //结果为: black

  大家可能会问既然是可选属性,可有可无的,那么为什么还要定义呢?对比起完全不定义,定义可选属性主要是:如果存在属性,能约束类型,而这也是十分关键的。

方法类型

  在 JavaScript 中,方法 function 是一种基本类型。在面向对象思想中,接口的实现是靠类来完成的,而 function 作为一种类型,是不是能够实现接口呢?答案是肯定的。在 TypeScript 中,我们可以使用接口来约束方法的签名。

interface SearchFunc {

(source: string, subString: string): boolean; //定义一个匿名方法

}

var mySearch: SearchFunc;

mySearch = function(source: string, subString: string) {  //实现接口

var result = source.search(subString);  //调用系统方法search查找字符串的位置

if (result == -1) {

return false;

}

else {

return true;

}

}

  上面代码中,我们定义了一个接口,接口内约束了一个方法的签名,这个方法有两个字符串参数,返回布尔值。在第二段代码中我们声明了这个接口的实现。编译器仅仅检查类型是否正确(参数类型、返回值类型),因此参数的名字我们可以换成别的。

数组类型

  在前面一节中我们学习了接口定义方法类型,这一节我们来学习接口定义数组类型。在数组类型中有一个“index”类型其描述数组下标的类型,以及返回值类型描述每项的类型。如下:

interface StringArray { //定义数组接口

[index: number]: string;  //每个数组元素的类型

}

var myArray: StringArray;

myArray = ["Bob", "Fred"];

  在接口的定义里面,索引器的名字一般为 index(当然也可以改成别的,但一般情况下都是保持名字为 index)。索引器的类型只能为 number 或者 string。

interface Array{

[myindex: number]: number;

}

interface Dictionary{

[index: string]: any;

}

Class类型

  在C#和java中interface是很常使用的类型系统,其用来强制其实现类符合其契约。在TypeScript中同样也可以实现,通过类实现接口要用implements关键字。如下代码:

interface IPrint{

print();

}

class A implements IPrint  { //实现接口

print(){  //实现接口中的方法

document.write("实现接口");

}

}

var B=new A();

B.print();

接口继承

  和类一样,接口也能继承其他的接口。这相当于复制接口的所有成员。接口也是用关键字“extends”来继承。

interface Shape {     //定义接口Shape

color: string;

}

interface Square extends Shape {  //继承接口Shape

sideLength: number;

}

一个interface可以同时继承多个interface,实现多个接口成员的合并。用逗号隔开要继承的接口。

interface Shape {

color: string;

}

interface PenStroke {

penWidth: number;

}

interface Square extends Shape, PenStroke {

sideLength: number;

}

  需要注意的是,尽管支持继承多个接口,但是如果继承的接口中,定义的同名属性的类型不同的话,是不能编译通过的。如下代码:

interface Shape {

color: string;

test: number;

}

interface PenStroke extends Shape{

penWidth: number;

test: string;

}

时间: 2024-08-01 15:37:31

五、TypeScript 接口的相关文章

02.TypeScript 接口

02.TypeScript 接口 TypeScript核心设计原则之一就是类型检查,而接口实际是为了这种类型检查而产生的,实际他并不会在生成的JavaScript里有半点体现. 一个简单的示例 // 定义IUser接口 interface IUser { name: string; // 姓名:字符串类型 age: number; // 年龄:数值类型 } function getUser(user: IUser) : string { return user.name + ':' + user

从C#到TypeScript - 接口

从C#到TypeScript - 接口 为了更好的抽象出行为和属性,TypeScript在ES6的基础上增加了接口interface.C#也有interface,不过TypeScript的接口还不大一样,C#里的接口一般是为类服务,让类实现接口中定义的方法或属性.TypeScript在C#基础上更进一步,由于JavaScript是门非常灵活的语言,TypeScript作为JavaScript的超集需要保持灵活性,所以接口在TypeScript里可以脱离具体的类,单独作为类似契约的存在,接口里的属

第五章 接口

接口 一.介绍 TypeScript 的核心原则之一是对值所具有的结构进行类型检查. 它有时被称做"鸭式辨型法"或"结构性子类型化". 在 TypeScript 里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约 二.接口初探 interface LabelledValue { label: string; } function printLabel(labelledObj: LabelledValue) { console.log(labelledO

Java多线程(五) Lock接口,ReentranctLock,ReentrantReadWriteLock

在JDK5里面,提供了一个Lock接口.该接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多的是可重入锁(ReentrantLock)以及读写锁(ReentrantReadWriteLock). 1. ReentrantLock 在Java多线程(二) 多线程的锁机制 里面,已经总结过通过使用Synchronized关键字实现线程内的方法锁定.但使用Synchronized关键字有一些局限性,上锁和释放锁是由JVM决定的

TypeScript接口

介绍 TypeScript的核心原则之一是对值所具有的结构进行类型检查. 它有时被称做“鸭式辨型法”或“结构性子类型化”. 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约. 接口初探 下面通过一个简单示例来观察接口是如何工作的: function printLabel(labelledObj: { label: string }) { console.log(labelledObj.label); } let myObj = { size: 10, lab

第二十五天接口、多态

1.java是面向对象的语言. 设计模式:接口 接口类是从java里衍生出来的,不是python原生支持的  主要用于继承里多继承 抽象类是python原生支持的主要用于继承里的单继承 但是接口类和抽象类都是为了写程序时进行代码的规范化 2.第一个接口类程序的引入:即如果前面写了两个支付功能,来了三个程序员写但是支付功能与前两个写的方法名称不一样怎么进行查询: class Payment: def pay(self,money): raise NotImplemented #主动抛异常,表示没有

TypeScript 接口

TS的接口好像C#/Java中的接口 , 但是TS的interface是不能继承(implement)其他的interface , 但是TS的interface可以规范自己的结构Object.无论如何TS比起JS来说,在OOP上面进步了不少. 注 : 下面的代码都是TS代码 /**  * Created by CV-PC153 on 2017/8/7.  */ interface User{     id:number;     name:string; } function greeter(u

第十五章 接口和集合

1.  接口的关键字:interface 2.  接口的特性: 1)接口属性都是静态常量 2)方法都是抽象方法 3)实现类必须实现接口的所有方法 4)实现类可以实现多个接口 5)接口不能被实例化,没有构造方法 6)接口中的方法不能私有化 3.  实现的关键字:implements 4.  子类和父类是is a 的关系     实现类和接口是has a 的关系 5.  集合:可以存放一组不同或相同类的数据. 6.  接口: collection List Set 类        Arraylis

C#图解教程 第十五章 接口

接口 什么是接口 使用IComparable接口的示例 声明接口实现接口 简单接口示例 接口是引用类型接口和as运算符实现多个接口实现具有重复成员的接口多个接口的引用派生成员作为实现显式接口成员实现 访问显式接口成员实现 接口可以继承接口不同类实现一个接口的示例 接口 什么是接口 接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 这种描述比较抽象,直接来看个示例. 下例中,Main方法创建并初始化了一个CA类的对象,并将该对象传递给PrintInfo方法. class