我正在尝试使用TypeScript将.svg
文件作为React组件导入。
根据React文档,这样做是这样的:
import { ReactComponent as Icon } from './Icon.svg';
在TypeScript文档之后,我添加了以下内容:
// custom.ts.d
declare module '*.svg' {
const content: any;
export default content;
}
和
// tsconfig.json
{
...
"files": [
"custom.d.ts"
]
}
SVG正在渲染。但是我收到TypeScript错误:
[ts] Module '"*.svg"' has no exported member 'ReactComponent'. [2305]
这是我完整的tsconfig
文件,如果有帮助的话:
{
"compileOnSave": false,
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./dist",
"strict": true,
"jsx": "react",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"removeComments": false,
"preserveConstEnums": true,
"sourceMap": true,
"skipLibCheck": true,
"esModuleInterop": true,
"baseUrl": ".",
"plugins": [
{
"name": "typescript-styled-plugin"
}
],
"typeRoots": ["./node_modules/@types"],
"lib": ["dom", "es2015", "es2017"]
},
"exclude": ["node_modules", "dist"],
"files": [
"custom.d.ts"
]
}
谢谢!
答案 0 :(得分:3)
您有export default content;
,但是您正在执行命名导入(不是默认导入)。
更改声明以导出要导入的名称:
declare module '*.svg' {
import React = require('react');
export const ReactComponent: React.SFC<React.SVGProps<SVGSVGElement>>;
const src: string;
export default src;
}
建议在tsconfig.json中不使用files
。相反,只需使用include
答案 1 :(得分:0)
declare module '*.svg' {
import React = require('react');
export const ReactComponent: React.SFC<React.SVGProps<SVGSVGElement>>;
const src: string;
export default src;
}
仅因为它对我有帮助并且有些相关。如果您在使用Jest时遇到错误,请check this out
答案 2 :(得分:0)
2019 除了@basarat的答案:React.SFC
已被废除,现在考虑使用React.FunctionComponent
,例如:
declare module '*.svg' {
import React = require('react');
export const ReactComponent: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
const src: string;
export default src;
}
答案 3 :(得分:0)
您将自定义类型命名为custom.ts.d
,并且ts编译器配置为处理custom.d.ts
扩展名后,它应该调用ts|tsx
。
之后,您应该可以像下面这样将其引用到您的tsconfig.json
包含部分中:
"include": ["custom.d.ts"]