如何确保typescript模块符合接口

时间:2016-11-20 12:35:12

标签: javascript typescript interface module

我正在为某些域编写特定内容剪贴簿。所以对于那些支持的域我只是声明了一些函数,让我们说只有一个

export function getContent(html: string): string {}

所以,我有很多具有这个确切界面的文件,例如......

export interface Domain {
    supportsHttps: boolean;
    getContent(html: string): string;
}

然后为了简单起见(制作支持的主机名和我的域名文件的地图),我只是

// domainsList.ts
import * as domainA from './domains/domainA';

export default {
    "www.domainA.com": domainA,
}

然后我导入我的域名列表

// index.ts
import * as url from 'url';
import domains from './domainsList';

const maybeDomain: Domain | undefined = domains[url.parse(someUrl).host];

if (maybeDomain) {
    // here I get proper autocompletion ...
    const content = maybeDomain.getContent(someHtml);
} else {
    throw new Error('domain not supported');
}

但是,如果我将接口中的函数名称从getContent重构为getContents,我实际上并没有在所有域文件中出现任何编译错误。

我想确保./domains/domainA.ts导出的结构符合我的域界面。我有办法做到吗?

1 个答案:

答案 0 :(得分:0)

由于您实际上没有定义具有Domain类型的函数,因此编译器不会将它们中的两个链接在一起,因此没有错误。

此外,界面比函数更适合

您可以通过定义类而不是函数来获取所有检查。像这样:

class AwesomeDomain implements Domain {
    public supportsHttps: boolean;
    getConten(html: string): string {
        return '';
    }
}

您可以找到完整的示例here