Ts App
常见问题:
没有类型声明文件的第三方库
- 写一个module-env.d.ts模块声明文件
ts
// declare module 'xxx' 用于给第三方模块声明类型。
declare module 'moudleName' {
const moudle: any;
export default moudle;
}- global-env.d.ts 用于全局类型
ts
// declare global 用于给全局对象(如 window)扩展类型。
declare global {
interface Window {
particlesJS: any;
}
}
export {};- 如果两个混用
- 在 TypeScript 中,带 export {} 的 .d.ts 文件会被认为是一个模块,这个模块的作用域默认 不是全局的
- 你把 declare global { ... } 写在模块中没问题,但是 同一个文件里如果直接写 declare module '...'
- 它会被认为是在模块作用域里声明,不是全局生效的,可能导致模块声明无效或者报错
保证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-ignoretsconfig.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" // 这里是你自定义的类型声明文件名
]
}
}