In spec.ts例如:Dom.spec.ts
describe('matchesSelector', () => {
let result: boolean;
let matchelement: HTMLElement;
it('Matches for the opera browser', () => {
matchelement.matches = matchelement.msMatchesSelector = null;
result = Dom.matches(matchelement, '#match');
expect(result).toBe(true);
});
当在上面的代码中调用 matchelement.msMatchesSelector 时,它会在 lib.dom.ts 中获取特定类型。 当我将打字稿版本升级到 3.0 时,它会重现以下错误
specdom.spec.ts(304,49): error TS2339: Property 'msMatchesSelector' does not exist on type 'HTMLElement'.
但它在我以前的打字稿版本 2.6.2 中工作正常
这是 3.0 和 3.1 之间的重大更改:
TypeScript 的内置 .d.ts 库(lib.d.ts 和 family(现在部分由 DOM 规范中的 Web IDL 文件生成。因此,已删除某些特定于供应商的类型。
建议根据需要扩展内置定义:
如果您的运行时保证其中一些名称在运行时可用(例如,对于仅限 IE 的应用程序(,请在项目中本地添加声明,例如: 对于 Element.msMatchesSelector,将以下内容添加到本地 dom.ie.d.ts
interface Element {
msMatchesSelector(selectors: string): boolean;
}
您也可以在文件顶部使用这些简单的代码
interface Element {
msMatchesSelector: any;
}