编程语言的类型
动态类型语言
运行期间做数据类型检查 js ruby python
静态类型语言
编译期间类型检查 c c++ java
typescript
冒号后面的都是类型
特性
- typescript 是 js 的超集
- 拥有静态类型
- 需要编译成 js 运行
优势
- ts 的静态类型可以在开发过程中,发现潜在问题
- 更好的编辑器提示
- 通过静态类型的声明,代码清晰易读
1 | // js中变量是动态类型 可以随时改变类型 |
类型注解 & 类型推断
ts 自动启用类型推断,判断变量类型
如果能分析变量类型不需要类型注解,否则需要
基础类型 & 对象类型
1 | // 基础类型 string number boolean symbol void null undefined |
联合类型
1 | let myName: string | number; |
交叉类型
将多个类型合并成一个类型
1 | type NativeButtonProps = BaseButtonProps & ButtonHTMLAttributes<HTMLElement> |
Partial
把一些属性变为可选的
1 | export type ButtonProps = Partial<NativeButtonProps & AnchorButtonProps> |
枚举
1 | enum TabTypes { |
函数注解
函数的入参需要类型注解,返回值如果可以类型推断的话不需要写
1 | // 函数入参及返回值注解 c:可选参数只能放最后 |
数组注解
1 | // 数组注解 能推断出来的不需要注解 直接的赋值的数组ts可以类型推断出来 |
interface & type
interface
是数据的共性的抽象 有自己的属性 只是在开发过程中做语法提示校验的工具 编译后不存在- 对对象的形状(shape)的描述
1 | interface Person { |
- 定义函数
1 | // interface 定义函数类型 |
- 对类(class)进行抽象
1 | interface Radio{ |
type
类型别名 只是简单的别名
1 | // 常用于 |
类型断言
联合类型时 ts 只拿到公有的一些方法 使用类型断言联合类型的某一种类型
1 | function getLength(input: string | number){ |
类
ts 给 es6 的类增加了访问修饰符
1 | class Person { |
泛型
泛型,泛指的类型, 定义函数、接口和类时使用占位符不指定具体类型,使用时才指定,用<>先声明, 声明泛型 T 可以任意命名函数泛型,代表不知道什么类型的同一种类型
- 函数泛型
1 | // 常规写法 |
- 接口泛型
1 | interface IPlus<T> { |
- 类泛型
1 | class Queue<T>{ |
泛型约束
1 | // 泛型约束 使用extends使泛型满足某些条件 |
声明文件
第三方库使用时需要声明文件
声明文件以.d.ts 结尾 如:jQuery.d.ts
有了声明文件后项目中就可以使用 jQuery()
提供语法提示且不报错
搜索第三方库的声明文件 TypeSearch
从 npm 安装第三方库的声明文件 npm @types
1 | // jQuery.d.ts |
typescript
编译
ts-node
编译执行.ts 文件
1 | npm install -g ts-node |
tsc
- 不带任何输入文件的情况下调用 tsc,编译器会从当前目录开始去查找 tsconfig.json 文件,逐级向上搜索父目录。
- 不带任何输入文件的情况下调用 tsc,且使用命令行参数–project(或-p)指定一个包含 tsconfig.json 文件的目录。
- 当命令行上指定了输入文件时,tsconfig.json 文件会被忽略。
1 | # Run a compile based on a backwards look through the fs for a tsconfig.json |
tsconfig
- 生成
tsconfig.json
1 | tsc --init |
- 使用指定的
tsconfig.json
编译
1 | // pacage.json |
tsconfig
配置
1 | // tsconfig.json |
typescript + React
常规写法
1 | import React from 'react'; |
使用 react 提供的声明
/node_modules/@types/react/index.d.ts 声明文件
1 | ... |
1 | import React, { FC, ButtonHTMLAttributes, |