JavaScript中的接口是什么?
许多 MDN 页面将事物描述为“界面”——我很惊讶“界面”没有链接到更解释性的页面;它只是在 MDN 的Web API 页面上描述为“对象类型” 。
回答
界面描述了对象的形状。(它有什么属性,这些属性包含什么类型的值等)它不是一个对象本身——它是对实现接口的特定对象是什么样子的更抽象的描述。
例如,在 HTML 标准中,DragEvent 接口是这样描述的:
[Exposed=Window]
interface DragEvent : MouseEvent {
constructor(DOMString type, optional DragEventInit eventInitDict = {});
readonly attribute DataTransfer? dataTransfer;
};
dictionary DragEventInit : MouseEventInit {
DataTransfer? dataTransfer = null;
};
所以DragEvent是一种类型的MouseEvent(这是另一种接口)。它有一个构造函数,这样你就可以调用new上window.DragEvent。调用构造函数时,您使用以下参数调用它:
type,这是一个DOMString(基本上只是任何普通字符串)- 类型的可选参数
DragEventInit(文档定义),默认为空对象
DragEvent 实例也有一个dataTransfer 属性
请注意,您要链接到的“接口”定义并不完全是 JavaScript 的东西,而是更像是 Web API 的东西。在浏览器之外的其他 JavaScript 实现中(例如,在 Node 中),接口可能意味着不同的东西(或根本没有意义)。
TypeScript 是一种广泛使用的 JavaScript 静态类型检查器,它具有非常相似的接口概念,用于描述特定对象的形状。例如:
// Define the shape of a Foo object
interface Foo {
prop: string;
}
// Create an object that implements Foo
const someFoo: Foo = {
prop: 'somevalue'
};