这是我参与「第五届青训营 」伴学笔记创作活动的第 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'});