Я расширяю Window
интерфейс с полем dataLayer
:
// ./src/@types/Window.d.ts
interface Window {
dataLayer: {
push: (...args) => void
}
}
Мой тестовый файл содержит:
// ./src/__tests__/index.test.ts
describe('window', () => {
it("window object should not be null", () => {
window.dataLayer.push('hello') // just for demonstrating the type error
expect(window).not.eq(null)
});
})
Когда я запускаю mocha с этой командой из package.json
, Я получаю ошибку типа компиляции машинописного текста о dataLayer
:
mocha --timeout 3000 -r ts-node/register src/**/*.test.ts
Вывод:
.../node_modules/ts-node/src/index.ts:228
return new TSError(diagnosticText,diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
sr/__tests__/index.test.ts(26,12): error TS2339: Property'dataLayer' does not exist on type 'Window'.
My ./tsconfig.json
содержит:
{
"compilerOptions": {
"outDir": "./dist",
"sourceMap": true,
"noImplicitAny": false,
"module": "commonjs",
"target": "es6",
"jsx": "react",
"declaration": true,
"allowJs": false,
"allowSyntheticDefaultImports": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"esModuleInterop": true,
"downlevelIteration": true,
"lib": ["es5", "es2015", "dom", "scripthost"],
"typeRoots": ["node_modules/@types", "src/@types"]
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
Кажется, что машинопись просто игнорирует объявление typeRoots
в моем файле tsconfig
.
Как правильно использовать мои собственные замедления типов с TypeScript и Mocha?