【发布时间】:2018-04-08 17:38:38
【问题描述】:
我从正在使用的库中收到以下界面:
export interface LatLng {
constructor(lat: number, lng: number): void;
lat(): number;
lng(): number;
}
如何创建此类的实现? (我需要一个测试模拟)一个看起来很自然的实现,构造函数定义为:
export class LatLngImpl implements LatLng {
constructor(private _lat: number, private _lng: number) { }
无法编译:
类“LatLngImpl”错误地实现了接口“LatLng”。 属性“构造函数”的类型不兼容。 类型 'Function' 不能分配给类型 '(lat: number, lng: number) => >void'。 类型 'Function' 不匹配签名 '(lat: number, lng: >number): void'
我读过 typescript 中的构造函数接口,但我认为它不适用于这里。
编辑:
我不明白的是界面中的这个constructor() 声明。带有构造函数签名的接口使用new () 语法。
【问题讨论】:
-
更正式地说,实现接口的类是类实例所具有的契约。由于类的实例不包含构造签名,因此它不能满足接口。 – 瑞安卡瓦诺stackoverflow.com/questions/13407036/…
-
是的,我了解 `new () : MyInterface` 的工作原理。但是在那个库中,它被声明为“constructor(): void”。我怀疑这是某种错误。接口中的声明将其视为普通函数,而在类中,构造函数是保留字。
标签: typescript