我正在为某些域编写特定内容剪贴簿。所以对于那些支持的域我只是声明了一些函数,让我们说只有一个
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导出的结构符合我的域界面。我有办法做到吗?
答案 0 :(得分:0)
由于您实际上没有定义具有Domain类型的函数,因此编译器不会将它们中的两个链接在一起,因此没有错误。
此外,域界面比函数更适合类。
您可以通过定义类而不是函数来获取所有检查。像这样:
class AwesomeDomain implements Domain {
public supportsHttps: boolean;
getConten(html: string): string {
return '';
}
}
您可以找到完整的示例here。