我有一个Angular 5应用,并且我想要一个定义如下功能的界面:
interface PersonInfo {
getName(): string;
}
我希望另一个接口具有一个函数,该函数的其中一个函数返回上述类型:
interface Parser{
getPersonInfo(document: string): PersonInfo;
}
然后我想在我的主要组件中使用它,如下所示。
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage implements PersonInfo, Parser {
constructor() {
const pi: PersonInfo = this.getPersonInfo('test');
console.log(pi.getName());
}
public getName(): string{
return 'getname';
}
public getPersonInfo(document: string): PersonInfo{
const pi: PersonInfo = {
getName(){
return 'getPersonInfo - getName()';
}
};
return pi;
}
}
问题是在console.log(ci.getName());
中,我的网站给我一个错误TypeError: ci.getName is not a function
。
我不确定如何获取getPersonInfo
来设置名称...然后getName()
来返回该名称...然后在构造函数中(或在其他函数中) )调用这些函数并获取名称。有帮助吗?
答案 0 :(得分:1)
我看到的第一个问题是,您向TSC断言所创建的“ pi”对象符合“ PersonInfo”,但缺少“ getName()”属性。
尝试一下:
public getPersonInfo(document: string): PersonInfo {
const pi: PersonInfo = {
getName() {
return 's';
}
};
return pi;
}
在可能的情况下,避免使用“ foo as Bar”语法,这似乎是一种替代方法,允许开发人员将值强制转换为编译器无法保证有效的类型。