Skip to content

关于和 Vite 一起使用时的问题

LancerComet edited this page May 21, 2022 · 1 revision

Vite 是分模块编译,在搭配 SWC/TSC 时,会在边缘情况出现一些问题

例如有一个 type.ts:

interface IUser {}

export {
  IUser
}

还有一个 index.ts:

import { IUser } from './type'

@Serializable()
class App {
  @JsonProperty()
  user: IUser = {}
}

这段代码在 Vite 下会炸掉,它会编译为

index.ts:

import { IUser } from '/src/type.ts'

let App = class App {
}
;
__decorate([JsonProperty(), __metadata("design:type", typeof IUser === "undefined" ? Object : IUser)], App.prototype, "user", void 0);

type.ts:

export {}

看到什么问题了么?

index.ts 试图引入 IUser,因为装饰器代码把 IUser 当成值用,但在 type.ts 中,因为 IUser 是一个 interface,所以会被 TS 自动类型裁剪.

因此这段代码会坏掉.

解决方法:

  • 使用 import type;
  • 将 IUser 和 class App 放同一个文件.
Clone this wiki locally