这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
思维导图
-
概念相关
- ts是js超集,静态语言(编译发生在运行前),弱类型语言(二者区别?强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。而弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换。)
-
基本内容
-
原始数据类型
- 变量后使用冒号加上类型名
- numer,string,boolean,null,undefind
-
任意值
- any表示任意类型
- 类型推导
-
联合类型,交叉类型
- 例子
- 访问联合类型只能访问交集部分
- 例子
-
对象的类型-接口
- 通常使用一个接口来规范和描述对象,接口名通常用I开头
- 只读属性,readonly
- 可选属性,键名:?类型名
- 任意属性,[propName:键名]:键值类型
- 通常使用一个接口来规范和描述对象,接口名通常用I开头
-
数组类型
- 类型名+方括号
- 泛型表示
- 元组表示
- 接口表示
-
函数类型
- 函数表达式
- 函数对象
- 函数接口
- 重载,函数可能有多个入参和返回值类型。把详细的定义写前面,ts从前到后逐个匹配
-
类型断言
- 手动指定类型,推荐写法 值 as 类型
- 只能通过编译,无法避免运行时的错误
-
作用
- 将一个联合类型断言为其中一个类型
- 将一个父类断言为更加具体的子类
-
将任何一个类型断言为 any 。
- 一方面不能滥用 as any,另一方面也不要完全否定它的作用,我们需要在类型的严格性和开发的便利性之间掌握平衡(这也是 TypeScript 的设计理念之一),才能发挥出 TypeScript 最大的价值。
-
将 any 断言为一个具体的类型。及时指明,防止一片any
- 如某个函数返回值是any,最好调用返回值之后将其断言成一个精确的类型,便于后续操作
-
限制
- 只有相互兼容才能断言
- 声明文件
-
内置对象
- JavaScript 中有很多内置对象,它们可以直接在 TypeScript 中当做定义好了的类型。方便在实际开发中使用
-
ECMAScript
- Boolean、Error、Date、RegExp
-
BOM,DOM
- Document、HTMLElement、Event、NodeList
- ts核心库
-
nodejs
- Node.js 不是内置对象的一部分,如果想用 TypeScript 写 Node.js,则需要引入第三方声明文件:npm install @types/node --save-dev
-
-
进阶
-
类型别名
- type定义一个类型,可以和联合类型和交叉类型交叉 搭配。
- type 类型名=对应类型
- 字面量
- 枚举
只能取某些值
-
代码
//基本
let a: number = 1;
let b: string = '1';
let c: boolean = true;
let d: null = null;
let f: undefined = undefined;
//对象
interface Iobj {
name: string;
readonly age: number; //只读
sex: 'man' | 'woman'; //或
hobby?: string; //可选
// [key: string]: string; //约束所有对象属性都必须是该属性的子类型,否则报错
[key: string]: any;
}
let myobj: Iobj;
//函数
function add(x: number, y: number): number {
return x + y;
}
const mult: (x: number, y: number) => number = (x, y) => {
//区分好两个箭头
return x * y;
};
interface Idiv {
(x: number, y: number): number;
}
const div: Idiv = (x, y) => x / y;
//泛型
interface Tobj<T> {
myKey: T;
}
let tobj: Tobj<number> = {
myKey: 1,
};
//数组
let arr: number[] = [1, 2, 3];
let arr1: Array<number> = [0, 1, 2];
let arr2: [number, string] = [1, '1'];
interface Iarr {
[key: number]: number;
}
let arr4: Iarr = [1,2,3];
参考文章
字节讲义
资料中的Typescript部分gitee.com/hongjilin/h…