declare、.d.ts 与 @types 是什么?声明能创造运行时对象吗?

先理解原理和示例,再练习完整口述与追问。

描述已存在能力;类型声明不产对应实现;模块声明与全局扩展;依赖版本与发布;不要用声明掩盖缺包。

declare 告诉 TypeScript 某能力由外部提供,.d.ts 描述库的类型接口,@types 包为未自带声明的部分库提供类型。它们不会生成真实函数或对象,因此编译通过也可能运行时报找不到变量。全局扩展和模块扩展有各自作用域,错误声明还可能污染整个项目类型。

ts
declare const BUILD_VERSION: string
console.log(BUILD_VERSION)

这只有类型约定,构建工具或运行环境还必须真实注入 BUILD_VERSION。声明第三方接口时,应以实际 SDK/服务契约为准;发布库则让 types 等入口指向正确声明,并与 JS 导出保持一致。

不能 declare 一个不存在 API 就当适配完成。类型依赖与实现版本失配会产生假安全;skipLibCheck 也不是修复错误契约。

声明文件只描述外部已有能力,不负责实现。我用它补充或发布准确类型,并验证模块入口和实际运行一致;遇到缺失实现先修真实依赖,不靠 declare 消音。