1 inheritance types class typescript angular
希望你们中的一位Angular2 / TypeScript 向导能够在我发疯之前提供帮助,或者至少提供一个正确方向的指针:-)
这就是我想要的
在下面的伪代码示例中,我希望对子级(继承的)的调用someOtherfunction()返回“2”...
我的要求是不是太多了?我似乎在网上找不到任何合适的例子......
我怎样才能做到这一点?
谢谢你-奥利弗
(下面的代码可能已损坏,仅供说明)
//
// Parent Class
//
export interface ICoreData <T> {
observeItems: Observable <T[]> ;
items: Array <T>;
}
@Injectable()
export class CoreData<T> implements ICoreData<T> {
public observeItems: Observable<T[]>;
private items: Array<T>;
constructor( 'Dependency Injection...' ) {}
coreFunction(): number {
return 1;
}
someOtherfunction(){
return this.coreFunction();
}
}
//
// Child class
//
export interface IMyDataStructure {
name: string;
age: string;
}
export interface ISpecificData extends ICoreData<IMyDataStructure> {
someExtraKey: number;
}
@Injectable()
export class SpecificData extends CoreData<IMyDataStructure> implements ISpecificData {
constructor() {
super();
}
coreFunction(): number{
//
// This function should "overwrite" the parent's original function
// and be called by the parent's someOtherfunction() function
//
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
你要求不过分。但是,您不能使用interfaces 来完成您想要完成的任务。您需要扩展 a class,它可以是通用的。
Aninterface只是数据类型的契约或蓝图(如果您愿意的话)。没有与 相关的功能interface。但是,在您的情况下,您希望能够在基类上拥有方法;您可以在派生中重写的方法。
我通常这样做的方法是声明一个abstract基类(以便基类本身无法实例化),然后从中extend声明类。这是一个例子:
请注意,我已经删除了所有 Angular2 的缺陷,以使示例尽可能简单。
abstract class Base<T> {
constructor(public controlled: T) { }
doIt(): string {
return `Base.doIt: ${JSON.stringify(this.controlled)}`;
}
doSomethingElse(): string {
return `Base.doSomethingElse: ${JSON.stringify(this.controlled)}`;
}
};
interface Foo {
foo: string;
bar: string;
};
class Derived extends Base<Foo> {
constructor(foo: Foo) {
super(foo);
}
doSomethingElse(): string {
return `Derived.doSomethingElse: ${JSON.stringify(this.controlled)}`;
}
};
let d: Derived = new Derived({ foo: 'foo', bar: 'bar' });
console.log(`doIt ==> ${d.doIt()}`);
console.log(`doSomethingElse ==> ${d.doSomethingElse()}`);
Run Code Online (Sandbox Code Playgroud)
输出:
doIt ==> Base.doIt: {"foo":"foo","bar":"bar"}
doSomethingElse ==> Derived.doSomethingElse: {"foo":"foo","bar":"bar"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6461 次 |
| 最近记录: |