接口
以下两个是等效声明, 第一个使用内联注解,第二个使用接口:
示例 B 的好处在于,如果有人创建了一个基于 的库来添加新成员, 他们可以轻松将此成员添加到 myPoint
的现有声明中:
// Lib a.d.ts
interface Point {
x: number,
y: number
}
declare const myPoint: Point
interface Point {
z: number
// Your code
let myPoint.z // Allowed!
因为 TypeScript 接口是开放式的,这是 TypeScript 的一个重要原则,它允许你使用接口模仿 JavaScript 的可扩展性。
基本上在 implements(实现)
的存在下,该外部 Point
接口的任何更改都将导致代码库中的编译错误,因此可以轻松地使其保持同步:
interface Point {
x: number;
y: number;
z: number; // New member
class MyPoint implements Point {
// ERROR : missing member `z`
x: number;
y: number;
}
注意,implements
限制了类实例的结构,即:
像 foo: Point = MyPoint
这样并不是一回事。
注意
思考以下例子,其中可以使用 new
调用某些内容:
interface Crazy {
new (): {
hello: number;
你可能会有这样的代码:
你可以使用接口声明所有的 JavaScript,甚至可以安全地从 TypeScript 中使用它们。但并不意味着你可以使用 TypeScript 类来实现它们。