这是我参与「第四届青训营 」笔记创作活动的第6天
| JavaScript | TypeScript |
|---|---|
| 动态类型 | 静态类型 |
| 弱类型语言 | 弱类型语言 |
基础语法
定义对象
基本数据类型
const 常量名: 常量类型 = 常量值
对象类型
对象名首字母一般为大写的i
const bytedancer: IBytedancer = {
属性名:属性值;
}
interface IByteddancer{
属性名:属性类型;
属性名:可选属性值1 | 可选属性值2 | 可选属性值3;
/*只读属性:在对象初始化后不能再对其值进行更改*/
readonly 只读属性名:只读属性类型;
/*可选属性:在对象初始化的时候可以不进行定义*/
可选属性名 ?: 可选属性类型;
/*任意属性:约束所有对象属性都必须是该属性的子类型*/
[key: string]:any;
}
函数类型
function add(x:number,y:number):number{
return x+7;
}
/*第二种写法*/
const mult: (x:number,y:number) => number = (x,y) => x*y;
数组类型
- 类型+方括号表示
type IArray1 = number[]; - 泛型表示
type IArray2 = Array < string | number | Record<string.number>> - 元组表示
type IArray3 = [number,number,string,string] - 接口表示
interface IArray4{ [key:number]:any; }
补充类型
- 空类型,无赋值
type IEmptyFunction() = () => void; - 任意类型,是所有类型的子类型
type IAnyType = any; - 枚举类型,支持枚举值到枚举名的正、反向映射
enum EnumExample{add = '+',mult = '*'} - 泛型:不预先指定类型,到使用的时候再指定具体的类型,也可以加泛型约束
函数重载
但这一种写法有些冗余,因此多采用下一种写法:
高级类型
- 联合类型:表示一个值可以是几种类型之一
- 交叉类型:多种类型叠加在一起成为一种类型,它包含了所需的所有类型的特性
- 类型保护
- 类型守卫:定义一个函数,它的返回值是一个类型调用,生效范围为子作用域
- 函数返回值类型
联合类型+类型保护 = 自动类型推断