gpt4 book ai didi

typescript - karma , typescript 定义文件未加载

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:23 25 4
gpt4 key购买 nike

我正在使用 karma、webpack 和 typescript 设置开发环境,但我遇到了 karma 未在测试中应用自定义定义文件的问题。

这是我的项目文件结构:

// file structure
project/
config/
karma.conf.js
tests/
test-files.ts
...
src/
tsdefinitions.d.ts
other-ts-files.ts
...
tsconfig.json

这里是 webpack 和 typescript 相关的 karma 配置部分

webpack: {
devtool: 'eval-source-map',
resolve: {
extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js']
},
module: {
loaders: [{
test: /\.tsx?$/,
loader: 'awesome-typescript-loader'
}]
}
},
webpackMiddleware: {stats: 'errors-only'},
mime: {'text/x-typescript': ['ts','tsx']},
basePath: '../',
files: [{
pattern: './test/**/*.ts',
watched: false
}],
preprocessors: {
'./test/**/*.ts': ['webpack', 'sourcemap']
}

最后是 tsconfig.json

{
"compilerOptions": {
"removeComments": true,
"allowSyntheticDefaultImports": true,
"baseUrl": "./",
"sourceMap": true,
"noImplicitAny": true,
"allowJs": true,
"module": "commonjs",
"target": "es2015",
"paths": {
"jquery": ["node_modules/jquery/dist/jquery"]
},
"exclude": ["node_modules"],
"files": [
"src/**/*.ts"
]
},
"awesomeTypescriptLoaderOptions": {
"useCache": false,
"useBabel": true,
"babelOptions": {
"presets": [
"es2015",
"stage-0"
]
}
}
}

我正在这样运行 karma 测试

./node_modules/.bin/karma start ./config/karma.conf.js

现在,当我使用 karma 构建项目文件时,一切正常,构建时没有错误。

但是当我运行测试构建时,会出现很多缺少在 tsdefinitions.d.ts 文件中声明的 Window 接口(interface)属性的错误。

最佳答案

我已经能够通过将我的类型放在与源文件不同的文件夹中并使用 typeRoots 字段将其包含在 tsconfig.json 中来实现这一点.

我的tsconfig.json:

{
"compilerOptions": {
...
"typeRoots": [
"./@types"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"src/**/*.test.ts"
]
}

karma.config.js:

const webpackConfig = require("./webpack.test");

module.exports = function(config) {
config.set({
basePath: "",
frameworks: ["mocha", "chai"],
plugins: [
"karma-chai",
"karma-chrome-launcher",
"karma-mocha",
"karma-mocha-reporter",
"karma-sourcemap-loader",
"karma-webpack"
],
files: [
"src/**/*.test.ts"
],
exclude: [],
webpack: webpackConfig,
preprocessors: {
"**/*.ts": ["webpack", "sourcemap"]
},
mime: { "text/x-typescript": ["ts", "tsx"] },
...
});
};

现在我可以为没有任何类型的模块定义类型,像这样:
@types/universal-url/index.d.ts:

declare module 'universal-url' {
export {URL, URLSearchParams} from 'whatwg-url'

export function shim(): void
}

还有我的src/utils/parseUrl.ts 文件:

import { URL } from 'universal-url'

export function parseUrl(url: string) {
return new URL(url)
}

同样,关键是 tsconfig.json 的 typeRoots 字段。这是文档:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

关于typescript - karma , typescript 定义文件未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com