这是我参与「第四届青训营 」笔记创作活动的第7天。
对于编程开发,我们有一个共识:错误出现的越早越好。写代码期间发现错误优于代码编译期间发现错误,代码编译期间发现错误优于代码运行期间。
JavaScript 中一个非常常见的错误是类型错误,因为JS对传入参数的类型并没有限制,而这种错误往往在运行期间才能发现。
直到今天 JavaScript 本身并不支持类型检测,这不仅导致类型错误的发生,而导致了前端开发者类型思维的缺失。
TypeScript 则是为了解决这一个痛点出现的。
TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。
基本语法
var/let/const 标识符: 数据类型 = 赋值;
基本数据类型
- number类型
- boolean类型
- string类型
对象类型
interface Iperson {
name: string;
age: number;
}
const person1: Iperson = {
name: "xxx",
age: 18
}
函数类型
function add(x: number, y: number) : number {
return a + b;
}
const add2: (x: number, y: number) => number = (x, y) => x + y;
数组类型
type IArr1 = number[];
type IArr2 = Array<string>; //泛型表示
type IArr3 = [number, string, number]; //元组表示
补充类型
void 空类型,表示无赋值
any 任意类型,是所以类型的子类型
enum 枚举类型
泛型
先不指定具体的类型,在使用的时候在指定类型的一种特性。
//泛型函数
function identity<T>(arg: T): T {
return arg;
}
//泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
字符串 / 数字 字面量
允许指定字符串 / 数字必须的固定值
type Iel = 'html' | 'body'
高级类型
联合/交叉类型
联合类型: IA | IB,表示一个值可以说几种类型之一
交叉类型: IA & IB,多种类型叠加在一起成为一种类型,包含所需的所有类型的特性。
类型保护
类型保护就是一些表达式,它们会在运行时检查以确保在某个作用域里的类型。 要定义一个类型保护,我们只要简单地定义一个函数,它的返回值是一个 类型谓词
function isFish(pet: Fish | Bird): pet is Fish {
return (<Fish>pet).swim !== undefined;
}