我想知道是否可以声明一个类函数的返回类型,它将通过它的构造函数在实例化时传递给类。
我正在使用一个'生物' class作为生物的通用基础,并将其特定(定义为界面' creatureSpecs')传递给构造函数。
一个生物行为'函数是可变的,取决于它是什么类型的生物。 '作用'将始终返回一个' Action'但是,它只需要一个特定于生物的代码路径来做到这一点。
所以 A)我可以在类本身声明通过构造函数传递的函数的返回类型吗?
B)这是错误的做法吗?
示例代码:
interface Action {type: string; direction: string;}
interface Creaturespec{ energy: number; direction: string; act: Function; preyseen?: Array<any>};
var Creaturespecs: {[id: string]: Creaturespec } = {}
class creature{
public energy: number;
public direction: string;
public act: Function;
public originChar : string;
public preyseen: Array<any>;
constructor(spec: Creaturespec, originChar: string) {
this.energy = spec.energy;
this.direction = spec.direction;
this.act = spec.act;
this.originChar = originChar
this.preyseen = spec.preyseen;
}
};
答案 0 :(得分:0)
这是一个简单的例子:
interface Action {
verb: string;
/* ? */
}
interface Spec<T> {
name: string;
act(): T;
}
class Creature<T> {
constructor(public spec: Spec<T>) {
}
getAction(): T {
return this.spec.act();
}
}
var dog = new Creature({
name: 'dog',
act() {
return { verb: 'woof', bark: 'bark' }
}
});
// b: { verb: string, bark: string }
var b = dog.getAction();