Ts App
常见问题:
没有类型声明文件的第三方库
写一个global-env.d.ts模块声明文件
ts
// global-env.d.ts
declare module 'moudleName' {
const moudle: any;
export default moudle;
}
// window.APlayer = APlayer;
保证ts可以正确的识别moudleName模块
- global-env.d.ts 放在项目根目录或 src 目录下
- 通常,TypeScript 会自动识别项目中的 .d.ts 文件,无论它们在哪里,只要它们不在 exclude 列表里。
- 2、可以在 tsconfig.json 中使用 include 字段明确包含它
js
{
"include": [
"src/**/*.ts", // 包含所有 TypeScript 文件
"global-env.d.ts" // 显式包含 global-env.d.ts
]
}
- 3、如果你有多个类型声明文件目录,使用 typeRoots
- 创建一个 types 目录,将 global-env.d.ts 放到其中
js
{
"compilerOptions": {
"typeRoots": [
"./node_modules/@types", // 保留默认的类型根目录
"./types" // 自定义类型根目录
]
}
}
4、使用 types 配置
js
{
"compilerOptions": {
"types": [
"global-env" // 这里是你自定义的类型声明文件名
]
}
}
忽略ts检查
js
// @ts-ignore
tsconfig.json 配置
moduleResolution
模块导入路径的解析:确定模块的物理文件路径。模块类型的解析:加载对应的类型定义文件(如 .d.ts 文件)。
- node 模拟 Node.js 模块解析规则,支持 node_modules。 现代项目的默认选择。
- classic 早期规则,不支持 node_modules,仅支持简单路径解析。 旧项目或全局脚本模式。
- bundler 兼容现代打包工具,支持复杂导入规则(如条件导入)。 配合现代工具链(如 Vite)。
- 更好地支持现代打包工具(如 Vite、Webpack 和 Rollup)的模块解析逻辑。
- 它特别适用于那些使用 ES 模块和路径别名的项目,并希望 TypeScript 的解析与实际运行环境的解析行为保持一致。
- 支持根据 package.json 的 exports 和 imports 字段解析模块,确保模块解析符合 ES 模块标准。
- bundler 模式可以准确处理使用现代模块导出(exports 字段)的第三方库,这些库在 node 模式下可能会导致解析问题。
json
{
"compilerOptions": {
"composite": true,
"baseUrl": "./",
"module": "ESNext",
/* moduleResolution 指定模块解析策略,决定 TypeScript 如何寻找模块文件(例如通过 import 或 require)。它的配置对模块的加载方式有直接影响。*/
"moduleResolution": "Bundler",
"typeRoots": [
"./node_modules/@types", // 保留默认的类型根目录
"./types" // 自定义类型根目录
],
"types": [
"global-env" // 这里是你自定义的类型声明文件名
]
}
}