如何看待d.ts
- 这个是typescript的类型文件,tsc 编译器会产生这个文件,我们也可以手动的编写这个文件,这样可以在不重新编写js的前提下,还能享受到ts带来的好处
- vscode 编译器的智能提示也是依靠这个文件
vscode 的只能提示是如何找到类型信息的
- 首先ts工程下的所有d.ts都自动被检测到,并加载到智能提示的范围。ts工程指的是tsconfig中的include, files所指定的。如果不指定那默认就是./src/xxx
- 第三方包的类型信息来自于哪里
- 包本身自带的。可以参考包本身的package.json中的types配置段。一般情况下d.ts文件跟对应的x.js在同一目录,并且同名。这个好处是得益于,ts的import xx from 'package',这个package是不带后缀的。
- 如果第三方的包并没有提供类型文件怎么办。安装约定,我们可以在node_modules/@types/xxx,在这个目录下面放置包的类型文件。注意,这个目录下面,类型文件必须以包的名称作为文件夹来组织。同时得有index.d.ts,这个是入口文件
- 第三方包的类型文件还可以放到哪里,如何让vscode 找到。我们可以通过tsconfig中的typeRoots这个配置项来配置。它的默认值就是node_modules/@types.同样,所有第三方包的文件都必须采用包名为文件夹来存放。
- 我们注意到,vscode 中有很多类型是全局的,也就是不需要采用import, 就自然有智能提示。这个是如何做到的。
- tsconfig中有个types的配置项,这个里面是包的名称,它其实指向的是node_modules/下面的文件夹。这些指定的文件夹会默认加到全局的类型中。默认是找文件夹下面的index.d.ts
如何看到///<reference path=""/>
,///<reference type=""/>
- 为什么需要它?
这个是用来告诉编译器,在编译当前文件时,先引入这些申明的文件。有人说这个跟c 语言中的头文件类似。 - 哪里可以使用这些文件
d.ts, ts 文件中都可以使用 - path vs type
path 则是标记引用的文件名称
type 则是标记引用的类型名称,这个类型名称,指的是包的名称,与import 同样的解析规则。除此之外,它还会去解析node_modules/@types/下面的文件夹。注意,这里的包名,其实就是文件夹的名称。
typescript 是如何依据类型去寻找js 文件呢。
- 首先ts 假设,d.ts 文件跟js 文件同名且在同一目录。而且ts 中的import,并没有指定后缀名
- 其次,node_modules/@types/下面的同名文件夹跟node_modules下面的同名文件夹也是关联信息。