declare let hello: string;
declare function greet(greeting: string): void;
假如 .d.ts 里面有这两个,说的是编译之前可以在 ts 项目里面随便用,不报错。但是运行之后,不能作为值直接使用,那这个到底发挥了什么作用?
请直接举个例子
“说的是编译之前可以在 ts 项目里面随便用,不报错。但是运行之后,不能作为值直接使用”
该描述过于模糊。
下面列出场景:
当编译器(你的开发工具)无法识别出一些第三方包的类型信息时,可以通过声明文件来指定类型
比如,在Element Plus的项目中使用国际化,官网的做法如下:
// main.ts
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
app.use(ElementPlus, {
locale: zhCn
})
上面的代码能跑起来,且生效,但实际在使用了TS的项目里,from 'element-plus/dist/locale/zh-cn.mjs'这个地方会有波浪线提示:
无法找到模块“element-plus/dist/locale/zh-cn.mjs”的声明文件
...隐式拥有 "any" 类型
解决这个波浪线提示的做法就是在声明文件里补上:
declare module 'element-plus/dist/locale/zh-cn.mjs'
无论是JavaScript库、模块、类、函数,还是别的,均可以通过这种方式解决类型问题,这便是.d.ts声明文件的作用。
说的非常不错!