TypeScript初探 | 青训营笔记

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

typescript的出现解决了一些什么问题?

  • 长期在没有类型约束的环境下开发,就会造成“类型思维“的缺失,对于程序员来说,这会养成一个极不好的编程习惯
  • 他为JavaScript提供了很好的类型检查支持,而且很好的支持现代ide,同时ts最终能够编译成标准的js代码。

typescript 基本语法

基础数据类型

语法规则:在变量名后面用冒号说明变量数据类型

/* 字符串 */
const str:string = 'string';
/* 数字 */
const num:number = 1;
/* 布尔值 */
const bool:bollean = true;
/* null */
cosnt n:null = null;
/* undefined */
const t:undefined = undefined

对象数据类型

语法规则:对象名后用冒号声明对象类型,然后使用interface <声明的对象类型>,将对象内部的字段进行类型限制。

  • 只读类型:在变量前面加readeonly,约束属性不可在对象初始化外赋值
  • 枚举类型:使用管道符分割可选的值,'man'|'woman'|'other';
  • 任意属性:[key:string]: any;
  • 可选类型:hobby?.string; 定义该属性可以不存在

TypeScript补充类型

  • 空类型:type IEmptyFunction = () => void
  • 任意类型:IAnyType = any;
  • 枚举类型:enum EnumExample = { add = '+' mult = '*' }
  • 泛型:type INumArr = Array<number> 不预先指定具体类型,而在使用的时候再指定类型的一种特性 type IGetRepeatArrR = <T>(target: T) => t[];
  • 泛型接口 & 多泛型:interface IX<T, U> { key: T;, val: U; }
  • 泛型类:class IMan<T> { instance: T; }
  • 泛型别名: `type ITypeArr = Array;

联合/交叉类型

指多个类型的合并类型

基础类型联合

let a:string | number;
a = 2023
a = '2023'

对象类型联合

对象联合类型只能访问联合中所有共同成员(交集)

interface Women{
  age: number,
  sex: string,
  cry(): void
}
interface Man{
  age: number,
  sex: string,
}
declare function People(): Women | Man;
let people = People();
people.age = 21; //ok
people.cry();//error 非共同成员

交叉类型

多种类型的集合,联合对象将具有联合类型的所有成员(并集)

interface People {
  age: number,
  height: number
}
interface Man{
  sex: string
}
const lilei = (man: People & Man) => {
  console.log(man.age)
  console.log(man.height)
  console.log(man.sex)
}
lilei({age: 18,height: 180,sex: 'male'});