如何从接口调用函数?

时间:2018-08-17 00:53:46

标签: angular typescript interface

我有一个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()来返回该名称...然后在构造函数中(或在其他函数中) )调用这些函数并获取名称。有帮助吗?

1 个答案:

答案 0 :(得分:1)

我看到的第一个问题是,您向TSC断言所创建的“ pi”对象符合“ PersonInfo”,但缺少“ getName()”属性。

尝试一下:

public getPersonInfo(document: string): PersonInfo {
    const pi: PersonInfo = {
        getName() {
            return 's';
        }
    };

    return pi;
}

在可能的情况下,避免使用“ foo as Bar”语法,这似乎是一种替代方法,允许开发人员将值强制转换为编译器无法保证有效的类型。