我正在使用TypeScript 1.6,并希望使用抽象方法创建一个抽象类,但在具体类中使用lambda /箭头函数。
这可能吗?下面显示的代码没有像它所说的那样编译
“Class'Base'定义实例成员函数'def',但扩展类'Concrete'将其定义为实例成员属性”......
abstract class Base {
abstract abc(): void;
abstract def(): void;
}
class Concrete extends Base {
private setting: boolean;
public abc(): void {
this.setting = true;
}
public def = (): void => {
this.setting = false;
}
}
我对Typescript规范的理解是当你声明时
public def = (): void => {
this.setting = false;
}
你实际上是在property
类声明了一个名为def
的method
而不是Base
。
属性不能(不幸的是恕我直言)在Typescript中抽象:https://github.com/Microsoft/TypeScript/issues/4669
您可以使用抽象属性:
abstract class Base {
abstract def: () => void; // This is the abstract property
}
class Concrete extends Base {
private setting: boolean;
public def = (): void => {
this.setting = false;
}
}
var myVar: Base = new Concrete();
myVar.def();
console.log((myVar as any).setting); // gives false
你可以做那个开始的typescript 2.0。为了完成这项工作,您需要为箭头函数声明一个类型
type defFuntion = () => void;
然后宣布
abstract class Base {
abstract abc(): void;
abstract readonly def: defFuntion;
}
here是此功能的参考