这是我参与「第四届青训营 」笔记创作活动的第5天
TypeScript 简介
TypeScript 是由微软开发的自由和开源的编程语言。它是 JavaScript 的超集,支持 ECMAScript 6 标准(ES6)。TypeScript 的设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。
静态类型
TypeScript 通过类型注解提供编译时的静态类型检查。
-
可读性增强:基于语法解析 TSDoc,ide 增强
-
可维护性增强:在编译阶段暴露大部分错误
JS 的超集
-
包含与兼容所有 JS 特性,支持共存
-
支持渐进式引入与升级
TypeScript 基本语法
基础数据类型
let q: string = 'aaa'; // 字符串
let w: number = 1; // 数字
let e: boolean = true; // 布尔值
let r: null = null; // null
let t: undefined = undefined; // undefined
对象类型
const bytedancer: IBytedancer = {
jibId: 111,
name: 'Lin',
sex: 'man',
age: 28,
hobby: 'swimming'
}
interface IBytedancer {
/* 只读属性:约束属性不可在对象初始化外赋值 */
readonly jibId: number;
name: string;
sex: 'man' | 'woman' | 'other';
age: number;
/* 可选属性:定义该属性可以不存在 */
hobby?: string;
/* 任意属性:约束所有对象属性都必须是该属性的子类型 */
[key: string]: any;
}
函数类型
typescript 中的函数需要对参数和返回值进行类型声明:
function add(x: number, y: number): number {
return x + y;
}
const mult: (x: number, y: number) => number = (x, y) => x * y;
数组类型
/* 方括号表示 */
type IArr1 = number[];
/* 泛型表示 */
type IArr2 = Array<string | number | Record<string, number>>;
/* 元组表示 */
type IArr3 = [number, boolean, string];
/* 接口表示 */
interface IArr4 {
[key: number]: any;
}
const arr1: IArr1 = [1, 2, 3, 4, 5];
const arr2: IArr2 = [1, 2, '3', '4', {a: 1}];
const arr3: IArr3 = [1, true, 'a'];
const arr4: IArr4 = ['a', () => null, {}, []];
补充类型
/* 空类型,表示无赋值 */
type IEmptyFunction = () => void;
/* 任意类型,是所有类型的子类型 */
type IAnyType = any;
/* 枚举类型:支持枚举值到枚举名的正、反向映射 */
enum EnumExample {
add = '+',
mult = '*'
}
EnumExample['add'] === '+';
EnumExample['+'] === 'add';
enum ECorlor {Mon, Tue, Wed, Thu, Fri, Sat, Sun};
ECorlor['Mon'] === 0;
ECorlor[0] === 'Mon';
/* 泛型:不预先指定具体的类型,而在使用的时候再指定类型的一种特性 */
type IGetRepeatArrR = <T>(target: T) => T[];
当我们定义一个变量不确定类型的时候有两种解决方式:
-
使用
any: 使用any时存在的问题,虽然知道传入值的类型但是无法获取函数返回值的类型,另外也失去了类型保护的优势。 -
使用泛型: 泛型指的是在定义函数/接口/类型时,不预先指定具体的类型,而是在使用的时候在指定类型限制的一种特性。
类型别名 & 类型断言
ts 类型断言可以用来手动指定一个值的类型。类型断言只是欺骗编译器,让编译器可以编译通过,但是如果进行强制类型转换,在执行的过程中会报错。
断言的语法分为两种:
- <> 尖括号
- as 语法
注意:在 tsx 中必须使用 as。
小结
联合类型可以被断言成其中一个类型。
父类可以断言成子类。
任何类型可以断言成
any。
any可以断言成任何类型。
最后
以上就是我在此次青训营课程 《TypeScript 入门》 中的一些思考和总结。