这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
基本语法:
基本类型定义
变量名 :类型名称 = 变量值
const q: string = 'Hello World'; // 字符串类型
const w: number = 1; // 数字
const e: boolean = false; // 布尔值
对象类型 --- 约定对象名前加一个大写的I来区分自定义对象
关键字:interface 对象名
只读属性:readonly +变量名:属性类型;
可选属性:变量名?:属性类型
任意属性:[key: string] :any;
interface INote {
readonly Id:number; // 只读属性,约束属性不可在对象初始化外赋值
name:string;
age:number;
hobby?:string; // 可选属性,定义该属性可以不存在
[key:string]: any; // 任意属性,约束所有对象属性都必须是该属性的子类型
}
函数类型:
- 声明函数 interface 函数名称 { (参数名:参数类型,参数名:参数类型):返回值类型}
interface IAdd {
(x:number,y:number):number;
}
const add: IAdd = (x,y) => x+y; // 计算x+y的值
- 函数重载:
function getDate(type:'string',timestamp?:string):string; // 对getDate函数进行重载
interface IGetDate {
(type:'string',timestamp?:string):string,
(type:'date',timestamp?:string):Date,
(type:'string' | 'date',timestamp?:string):Date | string
}
数组类型:
type IArr1 = number[]; // 类型+方括号表示
type IArry2 = Array<number>; // 泛型表示
type IArry3 = [number,number,string,string]; // 元组表示
interface IArry4 { // 接口表示
[key:number]:any;
}
补充
type IEmptypeFunction = () => void; // 空类型,表示无赋值
type IAnyType = any; // 任意类型
enum EnumExample {
add = '+',
mult = '*',
}
泛型 -- 不预先指定具体的类型,而在使用的时候在指定类型的一种特性
interface IX<T,R> { // 泛型接口
key : T;
val : U;
}
class IMan<T> { // 泛型类
instance : T;
}
type ITypeArr<T> = Array<T>; // 泛型别名
type IGetStrArr1 = <T extends string>(target: T) => T[]; // 泛型约束:限制泛型必须符合字符串
type IGetStrArr2<T = number> = (target : T) => T[]; // 泛型默认参数类型
字符串/数字变量 -- 允许指定字符串/数字必须的固定值
type IStr = 'one' | 'two' | 'three'; // IStr必须为其中一个
高级类型:
联合/交叉类型:
- 联合类型:IA | IB; 联合表示一个值可以是几种类型之一
- 交叉类型:IA & IB; 多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
类型保护/类型守卫
-
类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域
function getIsIA(arg:IA | IB):arg is IA {
return !! (arg as IA).a;
}
function log2 ( arg: IA | IB) {
if (getIsIA(args)) {
console.log(arg.a1)
} else {
console.log(arg.b1);
}
}
关键字
- keyof:其相当于取值对象中的所有key组成的字符串字面量,如 type IKeys = keyof {a:string; b:number}; // => type IKeys = "a" | "b"
- in: 其相当与取值字符串变量中的一种可能,配合泛型P,即表示每个key
- ? :通过设定对象可选选项,即可自动推导出子集类型
- extends :跟随泛型出现时,表示类型推断,其表达式可类比三元表达式 如 T === 判断类型?类型A:类型B
- infer : 出现在类型推断中,表示定义类型变量,可以用于指代类型 如 将函数的返回值类型作为变量,使用新泛型R表示,使用在类型推荐命中的结果中
typescript是javascript的超集,包含于兼容所有js特性,支持共存,支持渐进式引入与升级