这是我参与「第五届青训营 」笔记创作活动的第4天
TypeScript 基本语法
为什么是TypeScript
-
JS
-
动态类型(执行阶段完成类型的匹配)
-
弱类型语言
-
-
TS
-
静态类型(提前完成类型的匹配)
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露大部分错误
-
弱类型语言
-
JS的超集
- 包含于兼容所有JS特性,支持共存
- 支持渐进式引入与升级
-
基本语法
变量类型
const 变量名:变量类型 = '变量值';
// 字符串
const str: string = 'string';
// 数字
const num: number = 123;
interface接口
interface inter {
// 只读属性:属性只能在对象初始化时赋值*/
// 必填
readonly id: number;
name: string;
sex: 'man' | 'woman' | 'other';
age: number;
// 可选
hobby?: string;
// 任意属性:约束所有对象属性都必须是该属性的子类型
[key : string]: any;
}
函数
函数类型
interface IMult {
(x: number, y: number): number;
// 参数类型 返回值类型
}
const mult:IMult = (x, y) => x * y;
函数重载
在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,称之为重载函数。
重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是"一个名字,多种用法"的思想,不仅函数可以重载,运算符也可以重载。
数组类型
// 通常表示
type Arr1 = number[];
// 泛型表示
type Arr2 = Array<string | number | Record<string, number>>;
// 元组表示
type Arr3 = [number, number, string, string];
// 接口表示
interface Arr4 {
[key: number]: any;
}
泛型
不预先指定具体类型
// <>中的内容为泛型
// 泛型接口 & 多泛型
interface X<T , U> {
key: Y;
VAL: u;
}
// 泛型类
class Man<T> {
instance: T;
}
// 泛型别名
type TypeArr<T> = Array<T>;
字符串/数字 字面量
// 指定字符串/数字必须的固定值
// htmlDom必须为html、 body、 div、 span中的一个
type htmlDom = 'heml' | 'body' | 'div' | 'span';
// OddNumber必须为1、3、5、7、9中的一个
type OddNumber = 1 | 3 | 5 | 7 | 9;
TypeScript 高级数据类型
联合/交叉类型
-
联合类型:IA | IB;联合类型表示一个值可以是几种类型之一
- T | U
- 其返回类型为连接的多个类型中的任意一个
-
交叉类型:IA | IB;多种类型叠加到一起成为一种类型,包含了所需所有类型的特性
- T & U
- 其返回类型既要符合
T类型也要符合U类型
高级类型
-
类型约束
- T extends K
- 这里的 extends 不是类、接口的继承,而是对于类型的判断和约束,意思是判断 T 能否赋值给 K
-
类型映射(in)
- 会遍历指定接口的 key 或者是遍历联合类型
-
类型谓词
- parameterName is Type
parameterName必须是来自于当前函数签名里的一个参数名,判断 parameterName 是否是 Type 类型。
-
待判断类型
- 用
infer P来标记一个泛型,表示这个泛型是一个待推断的类型,并且可以直接使用
- 用
-
原始类型保护
-
typeof v === "typename"` or `typeof v !== "typename" - 用来判断数据的类型是否是某个原始类型(
number、string、boolean、symbol)并进行类型保护 - "typename"必须是 "number", "string", "boolean"或 "symbol"。 但是 TypeScript 并不会阻止你与其它字符串比较,语言不会把那些表达式识别为类型保护。
-
-
类型保护
-
instanceof
-
nstanceof的右侧要求是一个构造函数,TypeScript将细化为:- 此构造函数的
prototype属性的类型,如果它的类型不为any - 构造签名所返回的类型的联合
- 此构造函数的
-