typescript | 青训营笔记

69 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第11天

一、本堂课重点内容:

讲述了ts相关的基础语法,高级语法,工程应用等知识。

二、详细知识点介绍:

JS:动态类型(执行阶段才匹配类型,编译发生在执行的时候),弱类型语言

TS:静态类型(提前匹配类型,先编译后执行),弱类型语言

  • 弱类型语言:隐式类型转换
  • 强类型语言:数字和字符串不能相加
  1. 静态类型
    • 可读性增强:基于语法解析TSDoc, ide增强
    • 可维护性增强:在编译阶段暴露大部分错误=>多人合作的大型项目中,获得更好的稳定性和开发效率
  2. 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 = [123456];
const arr2: IArr2 = [12,'3','4', { a: 1 }];
const arr3: IArr3 = [12'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[];