我正在尝试使用动态创建的方法编写服务。
test.service.ts:
import {Injectable} from '@angular/core';
@Injectable()
export class TestService {
constructor() {
}
init(defaults: any) {
Object.keys(defaults).forEach(key => {
this[key] = (val?: any) => {
console.log(key, val)
}
});
}
}
app.component.ts
export class MyApp {
constructor(public platform: Platform,
private test:TestService) {
this.initializeApp();
test.init({
foo: 'bar'
});
console.log(test);
test.foo('foobar');
}
initializeApp() {
this.platform.ready().then(() => {
StatusBar.styleDefault();
Splashscreen.hide();
});
}
}
因此,当我注释掉test.foo('foobar');
行时,它正好向右转。当我取消对该行的注释时,它可以工作(我可以在控制台中看到),但是我收到了一个Typescript错误:
[21:42:12] typescript: src/app/app.component.ts, line: 28 Property 'foo' does not exist on type 'TestService'. L27: console.log(test); L28: test.foo('foobar');我解释的是因为在转发服务时没有这个方法。 我的问题是我如何告诉Typescript我不在乎。
我可以使用test['foo']('foobar')
,但我不想......
答案 0 :(得分:0)
init<Defaults>(defaults: Defaults): this & Defaults {
return Object.assign({}, this, defaults);
}
应该这样做但是因为我们返回一个新值而不是修改它,我们应该将方法从init
重命名为withDefaults
,类似于构建器模式,并使用它。
const withDefaults = test.withDefaults({
foo: 'bar'
});
console.log(withDefaults.foo);