-
Notifications
You must be signed in to change notification settings - Fork 0
关于和 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 放同一个文件.