这是我参与「第四届青训营 」笔记创作活动的第11天
一、本堂课重点内容:
讲述了ts相关的基础语法,高级语法,工程应用等知识。
二、详细知识点介绍:
JS:动态类型(执行阶段才匹配类型,编译发生在执行的时候),弱类型语言
TS:静态类型(提前匹配类型,先编译后执行),弱类型语言
- 弱类型语言:隐式类型转换
- 强类型语言:数字和字符串不能相加
- 静态类型
- 可读性增强:基于语法解析TSDoc, ide增强
- 可维护性增强:在编译阶段暴露大部分错误=>多人合作的大型项目中,获得更好的稳定性和开发效率
- JS的超集
- 包含于兼容所有Js特性,支持共存
- 支持渐进式引入与升级
基础语法
基础类型
const q: string = 'string';
对象类型
用大写的I开头表示这是一个类型
类型定义通过interface(接口)定义
const bytedancer: IBytedancer = {
jobId: 9303245,
name: 'Lin ',
sex: 'man ',
age: 28,
hobby: 'swimming',
}
interface IBytedancer {
/*只读属性:约束属性不可在对象初始化外赋值*/
readonly jobId: number;
name: string;
sex:'man' | 'woman' | 'other' ;
age: number;
/*可选属性:定义该属性可以不存在*/
hobby? : string;
/*任意属性:约束所有对象属性都必须是该属性的子类型*/
[key: string] : any;
}
/*报错:无法分配到"jobId",因为它是只读属性*/
bytedancer. jobId = 12345;
/*成功:任意属性标注下可以添加任意属性*/
bytedancer.plateform = 'data';
/*报错:缺少属性“name" , hobby可缺省*/
const bytedancer2: IBytedancer = {
jobId: 89757,
sex: 'woman',
age: 18,
}
函数类型
function add(x:number,y:number):number{
return x+y;
}
const mult:(x:number,y:number)=>number=(x,y)=>x*y;
interface IMult{
(x:number,y:number):number;
}
const mult2:IMult = (x,y) => x*y;
数组类型
/*「类型+方括号」表示*/
type IArr1 = number[];
/*泛型表示*/
type IArr2 = Array<string | number | Record<string,number>>;
/*元祖表示*/
type IArr3 = [number, number, string,string];
/*接口表示*/
interface IArr4 {[key: number]: any;}
const arr1: IArr1 = [1,2,3,4,5,6];
const arr2: IArr2 = [1,2,'3','4', { a: 1 }];
const arr3: IArr3 = [1,2,'3','4'];
const arr4: IArr4 = [ 'string' , () => 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 INumArr = Array<number>;
泛型
type IGetRepeatArr = (target: any) =>any [];
/*不预先指定具体的类型,而在使用的时候再指定类型的一种特性*/
type IGetRepeatArrR =<T> (target: T)=> T[];