这是我参与「第五届青训营 」伴学笔记创作活动的第4天
一、本堂课重点内容:
- TypeScript 历史及定义解析
- TypeScript 优势解读
- TypeScript 练习工具
- TypeScript 历史及定义解析
- TypeScript 优势解读
- TypeScript 练习工具
二、详细知识点介绍:
TypeScript 历史及定义解析
1.TypeScript 历史
2.TypeScript定义解析
- 静态类型
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露大部分错误
- 在多人合作的大型项目中,获得更好的稳定性和开发效率
- JS的超集
- 包含于兼容所有JS特性,支持共存
- 支持渐进式引入与升级
基本数据类型

对象类型
const bytedancer: IBytedancer = {
jobId: 9303245,
name: 'Lin',
sex: 'man',
age: 28,
hobby: 'swimming',
}
- 一般这个
IBytedancer前面有一个I,表示它是我们自定义得出的。
- 还可以这样定义「使用
interface」
interface IBytedancer {
readonly jobId: number;
name: string;
sex: 'man'|'woman'|'other';
age: number;
hobby?: string;
[key: string]: any;
}
函数类型
function add(x: number, y: number): number {
return x + y;
}
const mult: (x: number, y: number) => number = (x, y) => x * y
函数重载
function getDate(type: 'string', timestamp?: string): string;
interface IGetDate {
(type: 'string', timestamp?: string): string;
(type: 'date', timestamp?: string): Date;
(type: 'string'|'date',timestamp?:string): Date | string;
}
数组类型
type IArr1 = number[];
type IArr2 = Array<string | number | Record<string, number>>;
type IArr3 = [number, number, string, string]
interface IArr4 {
[key: number]: any;
}
Typescript补充类型
type IEmptyFunction = () => void;
type IAnyType = any;
enum EnumExample { Mon, Tue, Wed, Thu, Fri, Sat, Sun }
EnumExample['Mon'] === 0
EnumExample[0] = 'Mon'
type INumArr = Array<number>;
Typescript泛型
function getRepeatArr(target) {
return new Array(100).fill(target);
}
type IGetRepeatArr = (target: any) => any[];
type IGetRepeatArrR = <T>(target: T) => T[];
interface IX<T, U> {
key: T;
val: U;
}
class IMan<T> {
instance: T;
}
type ITypeArr<T> = Array<T>;
类型别名 & 类型断言
type IObjArr = Array<{
key: string;
[objKey: string]: any;
}>
functiom keyBu<T extends IObjArr>(objArr: Array<T>) {
const result = objArr.reduce((res, val, key) => {
res[key] = val;
return res;
}, {});
return result as Record<string, T>;
}
type IDomTag = 'html' | 'body' | 'div' | 'span'
type IOddNumber = 1 | 2 | 3 | 4 | 5 | 7 | 9
联合/交叉类型
- 联合类型:
IA|IB;联合类型表示一个值可以是几种类型之一
- 交叉类型:
IA&IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
type IBookList = Array<{
author: string;
} & ({
type: 'history';
range: string;
} | {
type: 'story';
theme: string
})>
类型保护与类型守卫
interface IA {a: 1, a1: 2}
interface IB {b: 1, b1: 2}
function getIsIA(arg: IA | IB): arg is IA {
return !!(arg as IA).a;
}
function log3(arg: IA | IB) {
if (getIsIA(arg)) {
console.log(arg.a1)
} else {
console.log(arg.b1)
}
}
高级类型
function merge1(sourceObj, targetObj) {
const result = { ...sourceObj };
for(let key in targetObj) {
const itemVal = sourceObj[key];
itemVal && (result[key] = itemVal);
}
return result;
}
function merge2(sourceObj, targetObj) {
return { ...sourceObj, ...targetObj };
}
interface ISourceObj {
x?: string;
y?: string;
}
interface ITargetObj {
x: string;
y: string;
}
type IMerge = (sourceObj: ISourceObj, targetObj: ITargetObj) => ITargetObj;