You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript 4模块导入报错及类型校验失效问题求助

解决Deno+ES模块下TypeScript类型校验失效问题

问题核心原因

你遇到的问题源于旧教程采用的CommonJS/UMD环境模块类型声明写法,和当前Deno使用的ES模块系统不兼容,修改导入方式后导致类型校验逻辑失效。

正确解决方案

1. 调整类型文件结构

修改types/AuthTypes.d.ts,移除declare module 'AuthTypes'的包裹,直接导出接口(这是项目内部自定义类型的标准写法):

export interface User {
  email: string
  roles: Array<string>
  source?: string
}

2. 使用ES模块语法导入类型

在user.ts中改用ES模块的类型导入方式,无需保留///<reference path>指令:

import type { User } from './types/AuthTypes.d.ts'

let alice: User
alice = {
  email: 'alice@snow.com',
  roles: ['super_admin'],
  source: 'facebook',
  amigo: 'chesu' // 此处会恢复预期的类型报错:"amigo"属性不存在于User类型中
}

console.log(alice);

可选优化方案

你也可以将AuthTypes.d.ts重命名为AuthTypes.ts(普通TypeScript文件),导入方式完全不变,Deno会自动处理类型解析,效果一致。

关键细节说明

  • 旧教程的declare module 'AuthTypes'是CommonJS时代的环境模块写法,用于给无类型的第三方全局模块补全类型,不适用于项目内部的自定义类型。
  • 直接导入包裹declare module的.d.ts文件时,Deno会将其识别为全局模块而非本地模块,导致类型校验逻辑失效。
  • 前两个报错的本质是ES模块规范要求:禁止使用CommonJS的import = require()语法,导入本地文件必须使用相对路径(.//../前缀)。

内容的提问来源于stack exchange,提问作者Ουιλιαμ Αρκευα

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:06:18