js 实现接口
在 JavaScript 中实现接口
JavaScript 是动态类型语言,原生不支持接口(Interface)的概念,但可以通过多种方式模拟接口的行为。
使用 TypeScript 实现接口
TypeScript 是 JavaScript 的超集,支持接口定义:
interface MyInterface {
method1(): void;
method2(param: string): number;
}
class MyClass implements MyInterface {
method1() {
console.log("Method 1 called");
}
method2(param: string) {
return param.length;
}
}
使用 Duck Typing 模拟接口
JavaScript 可以通过检查对象是否具有特定方法来模拟接口:
function implementsInterface(obj, interfaceMethods) {
return interfaceMethods.every(method => typeof obj[method] === 'function');
}
const requiredMethods = ['method1', 'method2'];
const myObject = {
method1: function() {},
method2: function(param) { return param.length; }
};
if (implementsInterface(myObject, requiredMethods)) {
// 对象符合接口要求
}
使用类继承模拟接口
可以通过基类定义方法签名,子类必须实现:
class Interface {
method1() {
throw new Error("必须实现 method1");
}
method2() {
throw new Error("必须实现 method2");
}
}
class Implementation extends Interface {
method1() {
// 具体实现
}
method2() {
// 具体实现
}
}
使用工厂函数验证接口
创建对象时强制验证方法存在:

function createInterface(obj) {
const required = ['method1', 'method2'];
required.forEach(method => {
if (typeof obj[method] !== 'function') {
throw new Error(`缺少必需方法: ${method}`);
}
});
return obj;
}
const myApi = createInterface({
method1() {},
method2(param) { return param.length; }
});
最佳实践建议
- 对于大型项目,推荐使用 TypeScript 获得完整的接口支持
- 纯 JavaScript 项目中,Duck Typing 是常见的接口模拟方式
- 接口验证应该在开发阶段尽早进行,避免运行时错误
- 文档化接口约定,即使没有编译时检查
这些方法各有利弊,选择取决于项目规模、团队偏好和是否需要严格的类型检查。






