typescript和vue结合,引入文件报错vetur [2307]

typescript中导入.png/.json/.mp3等文件时同样需要编写声明文件。不添加声明文件会出现引入类型错误。
可以创建一个声明文件src/@types/definition.d.ts

  1. // definition.d.ts
  2. declare module '*.png' {
  3. const value: string
  4. export = value
  5. }
  6. // index.ts
  7. // 之后在 TS 中导入也不会有问题
  8. import avatar from './img/avatar.png'

第三方模块没有可用的声明文件

使用第三方不是 TypeScript 编写的模块时,我们可以直接下载对应的声明文件:yarn add @types/{模块名}。然而有些模块是没有对应的声明文件的,这时候就需要我们自己编写声明文件,以rc-form为例,只需在src/@types/definition.d.ts中添加对应代码:

  1. // definition.d.ts
  2. declare module "rc-form" {
  3. // 在此只是简单地进行类型描述
  4. export const createForm: any;
  5. export const createFormField: any;
  6. export const formShape: any;
  7. }

webpack中配置别名,在TS中使用时会出现找不到模块

  1. // webpack.config.js
  2. const config = {
  3. // ...
  4. aliases: {
  5. // 公共的工具类、容器和组件
  6. utils: path.resolve('../utils'),
  7. },
  8. // ...
  9. }
  10. // index.ts
  11. import {ua} from 'utils/broswer'
  12. // Cannot find module 'utils/browser'

需在 tsconfig.json 添加baseUrl和paths的配置:

  1. // tsconfig.json
  2. {
  3. "compilerOptions": {
  4. // ...
  5. "noImplicitAny": true,
  6. // 添加配置
  7. "baseUrl": ".",
  8. "paths": {
  9. "utils/*": ["../utils/*"],
  10. "components/*": ["../components/*"]
  11. }
  12. },
  13. "include": ["./src/*", "./src/**/*"],
  14. "exclude": ["node_modules"]
  15. }