【发布时间】:2021-06-19 08:28:45
【问题描述】:
我正在使用 TypeScript,我正在尝试研究如何在使用 ES6 getter 和 setter 的类中实现接口。
这可能吗?使用下面的代码突出显示类中的错误。
例如:
(属性)SportsCar.make:字符串
“SportsCar”类型中的属性“make”不能分配给基类型“Car”中的相同属性。
类型 'string' 不能分配给类型 '{ (make: string): string; (): 空白; }'.ts(2416)*
代码:
export interface Car {
_make: string;
_model: string;
make(make: string): string; // for setter
make(): void; // for getter
model(model: string): string; // for setter
model(): void; // for getter
}
class SportsCar implements Car {
_make: string;
_model: string;
constructor(make:string, model: string) {
}
set make(make: string) {
this._make = make
}
get make() {
return this._make
}
set model(model: string) {
this._model = model
}
get model() {
return this._model
}
}
module.exports = SportsCar;
使用 getMake() 和 setMake() 代替 ES6 getter 和 setter 可以工作。但如果可能的话,我想使用 ES6 类的 getter 和 setter。
例如,这是有效的:
export interface Car {
_make: string;
_model: string;
setmake(make: string): void; // for setter
getmake(): string; // for getter
setmodel(model: string): void; // for setter
getmodel(): string; // for getter
}
class SportsCar implements Car {
_make: string;
_model: string;
constructor(make:string, model: string) {
}
setmake(make: string) {
this._make = make
}
getmake() {
return this._make
}
setmodel(model: string) {
this._model = model
}
getmodel() {
return this._model
}
}
module.exports = SportsCar;
最后,在使用接口时,是否可以将类属性设置为私有?接口似乎不允许您定义它,如果使用下面的代码,我会在 VS Code 中收到以下错误。
代码:
export interface Car {
_make: string;
_model: string;
setmake(make: string): void; // for setter
getmake(): string; // for getter
setmodel(model: string): void; // for setter
getmodel(): string; // for getter
}
class SportsCar implements Car {
private _make: string;
private _model: string;
constructor(make:string, model: string) {
}
setmake(make: string) {
this._make = make
}
getmake() {
return this._make
}
setmodel(model: string) {
this._model = model
}
getmodel() {
return this._model
}
}
module.exports = SportsCar;
错误:
类跑车 “SportsCar”类错误地实现了“Car”接口。 属性“_make”在“SportsCar”类型中是私有的,但在“Car”类型中不是私有的。ts(2420)
【问题讨论】:
标签: typescript interface