打字稿图像导入

Mar*_*vic 9 module typescript reactjs tsconfig react-tsx

我在这里找到了一个解决方案:Webpack和Typescript图像导入

但我得到的错误是:

[ts]
Types of property 'src' are incompatible.
  Type 'typeof import("*.png")' is not assignable to type 'string | undefined'.
    Type 'typeof import("*.png")' is not assignable to type 'string'.
Run Code Online (Sandbox Code Playgroud)

我想我需要以某种方式投射导入,但无法弄清楚如何.我在React做这个.我看到该src属性被定义为string | undefined,这就是错误弹出的原因.

这是代码:

import * as Logo from 'assets/images/logo.png';
Run Code Online (Sandbox Code Playgroud)

HTML:

<img src={Logo} alt="" />
Run Code Online (Sandbox Code Playgroud)

并根据上述解决方案定义:

declare module "*.png" {
  const value: string;
  export default value;
}
Run Code Online (Sandbox Code Playgroud)

Tsconfig:

{
  "compilerOptions": {
    "baseUrl": "./",
    "jsx": "react",
    "lib": ["es5", "es6", "dom"],
    "module": "commonjs",
    "noImplicitAny": false,
    "outDir": "./dist/",
    "sourceMap": true,
    "strictNullChecks": true,
    "target": "es5",
    "typeRoots": [
      "custom_typings"
    ]
  },
  "include": ["./src/**/*.tsx"],
  "exclude": ["dist", "build", "node_modules"]
}
Run Code Online (Sandbox Code Playgroud)

Vit*_*iko 40

为了react-native

在项目文件夹中创建global.d.ts文件root并在其中添加下一行

declare module '*.png' {
  const value: import('react-native').ImageSourcePropType;
  export default value;
}
Run Code Online (Sandbox Code Playgroud)

  • 这很好用,但我希望 TypeScript 在导入文件时检查文件是否存在。按原样,它允许我导入一个不存在的文件,这会导致运行时错误。我一直在寻找一种方法来保留文件存在检查,就像我们从导入 JS/TS 中获得的那样,但尚未找到方法。 (2认同)

Piy*_*ani 26

摆脱该错误的方法之一是修改d.ts文件,如下所示:

declare module "*.png"
Run Code Online (Sandbox Code Playgroud)

去掉

{
  const value: string;
  export default value;
}
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

declare module "*.png" {
  const value: any;
  export default value;
}
Run Code Online (Sandbox Code Playgroud)

更新

类型检查的最佳解决方案是:

declare module "*.png" {
   const value: any;
   export = value;
}
Run Code Online (Sandbox Code Playgroud)

  • `.d.ts` 文件需要放入 `src/` 文件夹才能工作,以防其他人在将其放入项目根目录时遇到问题。 (9认同)
  • 我得到:TS1192:模块'“ * .png”'没有默认导出。 (4认同)
  • 由于[这个长期存在的问题](https://github.com/microsoft/TypeScript/issues/28097),我无法使其正常工作。一旦我将通配符“declare module”语句移动到它们自己的类型文件中,而不是我用于其他内容的现有“globals.d.ts”(碰巧“导入”接口声明...),我能够`从“./logo.png”导入LOGO`。 (3认同)

小智 5

我创建了index.d.ts并添加了“声明模块“*.jpg””,它不起作用,但是当我将名称更改为custom.d.ts(或任何其他名称)时,它工作正常。