编辑: 黑豆奇酷 | 2014-12-31 |
printLabel'
的调用.其中'
printLabel'
方法有一个参数,我们需要 给这个参数传入一个带有名为'
label'
的字符串类型属性的对象.注意我们传入的这 个对象实际上不只有'
label'
属性,但编译器只检查那些指定的属性,查看它们的类 型是否相符. 让我们重写上面的例子,这次我们将使用接口来描述参数的需求,即传入的对象要 有字符串类型的label属性. TypeScript手册中文版
12 接口 interface LabelledValue { label: string;
} function printLabel(labelledObj: LabelledValue) { console.log(labelledObj.label);
} var myObj = {size: 10, label: Size
10 Object };
printLabel(myObj);
我们可以用这个名为'
LabelledValue'
的接口来描述我们前面例子中的需求.它仍旧 表示需要有一个名为'
label'
的字符串属性.值得注意的是,与其他编程语言不同, 我们不需要明确地说 传给'
printLabel'
的对象实现了这个接口.这里只关注数据的 结构 .只要我们传给函数的对象满足指定的需求,那这个对象就是合法的. 必须指出的是,类型检查器并不要求这些属性遵循一定的顺序.只要接口要求的属 性存在,并符合类型即可. 可选属性(Optional Properties) 接口中的属性并不都是必要的.在遵循一定的条件时,有些属性甚至可以不存在. 在创建 option bags 这样的模式时,用户传给函数作为参数的对象,往往只包含部 分属性在里面.在这种情况下,可选属性就显得很有用了. 下面是这种模式的一个例子: TypeScript手册中文版
13 接口 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 });
除了在声明可选属性时需要加上'
?'
作为标识以外,带有可选属性的接口的写法与其 他接口相似. 使用可选属性的优势在于,我们可以在描述可能存在的属性的同时,捕捉那些我们 不希望存在的属性.举例来说,如果我们错误地拼写了传给'
createSquare'
方法的属 性名的话,就会有一条错误信息提示我们: TypeScript手册中文版
14 接口 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.collor;
// Type-checker can catch the mistyped } if (config.width) { newSquare.area = config.width * config.width;
} return newSquare;
} var mySquare = createSquare({color: black });
函数类型 接口可以描述各式各样的JavaScript对象.然而我们除了用接口来描述一个对象的 属性以外,也可以用它来描述函数类型. 我们需要给接口一个调用标记来描述函数类型.它看起来就像是只有参数列表和返 回类型的函数的定义. interface SearchFunc { (source: string, subString: string): boolean;
} 定义好了这个接口以后,我们就可以像使用其他接口一样使用这个函数类型接口. 下面展示了我们要如何创建一个函数类型变量并给它赋值一个同样类型的函数值. TypeScript手册中文版