类型断言typescript
类型声明(declare)npm
以前讲语法,以为这些既属于语法,可是不是特殊的类型,一时间不知道怎么分类,因此就作为类型补充知识。bash
隐式类型推断 : 若是咱们没有明确经过类型注解去标注这个变量的类型,那么TypeScript
根据一些能够推断出这个类型。函数
下面这个例子:学习
若是咱们没有设定类型,赋值了一个数字,那么会推断这个为number
类型,以后再赋值为字符串,就会报类型错误。url
若是TypeScript
没法推断这个变量的类型,就会定为any
,后面赋值什么类型均可以。spa
开发的时候仍是建议你们为每一个变量添加明确的类型,为了后期更直观的理解代码。3d
TypeScript
有时没法推断出来一些变量的类型,可是咱们能够明确知道,因此有些时候它给了咱们一些不肯定选项的时候咱们能够断言成肯定的类型。使用类型断言就能够辅助ts
更加明确每一个变量的类型。code
TypeScript
类型断言不是类型转换,类型转换是在运行阶段,断言是在编译阶段,编译事后断言就不存在了。
举个例子:blog
const nums = [110, 120, 119, 112] // 下面返回的 res ,ts认为多是number,也多是undefined const res = nums.find(i => i > 0) // 若是下面要对res进行运算,res直接运算就会报错 const square = res * res // 报错,就要断言它为number类型才行
使用as就能够明确num1
是一个数字,下面就可使用数字运算
const num1 = res as number
这个尖括号和jsx
的标签产生冲突,那种状况不推荐使用
const num2 = <number>res
开发过程当中咱们会用到第三方模块,这些模块并不都是用typeScript
编写的,因此它的成员可能就没有强类型体验。
typescript
匹配的类型声明,能够直接使用declare
)存在的缘由是为了兼容普通的js模块.
使用lodash
举例子,lodash
自己没有集成类型声明,因此使用的时候会报错。咱们能够本身手动进行类型声明
下面的函数,直接调用camelCase
没有类型提示,因此在前面添加declare
对函数camelCase
进行参数和返回值的限制,这样能够看到这个函数有了类型的提示
那上面的lodash
仍是报错,那么咱们看可能须要下一些东西进行兼容,由于TS
社区比较强大,大部分的第三方模块都有对应的类型声明,直接安装其对应的类型声明模块(通常是@types/模块名
)便可.
类型声明是开发依赖,里面不会提供任何的代码,只是对模块作对应的类型声明
安装
# yarn yarn add @types/lodash --dev # npm npm i @types/lodash
安装以后lodash可看到里面有不少.d.ts
的类型声明文件,对应的代码中就有对应的类型声明提示了
query-string
—— 解析query
中的url
字符串
自己包里面集成了类型声明文件,不须要额外再安装。
# yarn yarn add query-string # npm npm i query-string
使用的时候看到有类型声明的介绍