TypeScript中如何从同时包含属性与函数签名的接口创建对象?
你定义的TeacherFunc属于TypeScript的混合类型接口,描述的是同时具备函数调用能力和自定义属性的实体,本质是带附加属性的函数,不能直接用普通对象字面量声明。
正确实现方式如下:
interface TeacherFunc { id: number; name: string; (x: number, y: number): number; } // 先创建符合函数签名要求的函数,同时做类型断言 const tf = function(x: number, y: number): number { return x + y; } as TeacherFunc; // 给函数挂载对应的属性 tf.id = 1; tf.name = "Aaron";
验证使用完全符合接口要求:
// 作为函数调用 console.log(tf(2, 3)); // 输出 5 // 访问属性 console.log(tf.id, tf.name); // 输出 1 Aaron
原理说明:JavaScript中函数本身就是特殊的对象,支持挂载自定义属性,TypeScript的混合类型接口就是专门用来描述这类场景的语法。直接写对象字面量会报错,因为普通对象默认不满足可调用的函数签名约束。
内容的提问来源于stack exchange,提问作者Display Name
相关产品推荐
相关产品推荐

