它是使用Typescript,React和webpack创建的Web应用程序。我想通过webpack使用svg文件。但是,我得到了
TS2307: Cannot find module '~/images/slide.svg'.
将打字稿文件放在/ frontend / src /上,然后成功构建打字稿文件。
然后,我在网站上尝试了一些解决方案。但是我不能解决这个问题。 我尝试的内容简要描述如下。
我添加了一个文件,其中在'typeRoots'中定义了类型。 tsconfig.json
{
"compilerOptions": {
"outDir": "./app/assets/javascripts/bundles",
"sourceMap": true,
"allowJs": true,
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"moduleResolution": "node",
"module": "es2015",
"target": "es6",
"jsx": "react",
"removeComments": true,
"baseUrl": ".",
"paths": {
"~/*": ["./frontend/src/*"]
},
"typeRoots": ["types", "node_modules/@types"]
},
"awesomeTypescriptLoaderOptions": {
"useCache": true,
"cacheDirectory": "tmp/build_caches/awesome-typescript-loader"
},
"include": [
"./frontend/src/*"
],
"exclude": [
"node_modules",
"bundles",
"**/*.js"
]
}
types / images.d.ts
declare module '*.svg' {
const content: any;
export default content;
}
我在webpack上使用“文件加载器”来构建svg fild。
请帮助我!
答案 0 :(得分:2)
我最好像这样:
"include": ["**/*.ts", "**/*.tsx", "images.d.ts"],
答案 1 :(得分:1)
我认为这是因为您在Typescript配置中的 include 部分。 试试这个:
"include": [
"./frontend/src/*/**"
],
否则,您只包括键入 src 文件夹顶层中的文件。而且您的 svg 键入文件位于子级别中,因此Typescript不会包含该文件。
答案 2 :(得分:0)
如果您使用 Nextjs
,您可以创建一个新文件 additional.d.ts
(与 next-env.d.ts
级别相同)并声明图像文件的模块。然后,您应该将此文件包含在您的 tsconfig.json
中。
additional.d.ts
:
declare module "*.png";
declare module "*.jpg";
declare module "*.jpeg";
declare module "*.svg";
declare module "*.gif";
tsconfig.json
:
{
...
"include": ["next-env.d.ts", "additional.d.ts", "**/*.ts", "**/*.tsx"],
}