文章目录

  • TS基础2(泛型、枚举、元组)-学习笔记
    • 泛型
    • 枚举
    • 元组
    • 例子参考

TS基础2(泛型、枚举、元组)-学习笔记

泛型

    //泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。//<T>   泛型变量T T表示什么?任何类型function hello<T>(name:T):T{   //hello函数是泛型return name};//hello<string>('abc');hello<string|number>(123);  //定义多个类型hello(123);  //类型推断  编译器会根据传入的参数来自动的判断T的类型//缺点  只能传string// function hello2(name:string):string{//     return name// };// hello2(123);//缺点 不确定返回值的类型function hello3(name:any):any{return name};hello3(123);//泛型在函数中具体的写法//函数声明function f<T>(x:T):T{return x};//函数表达式let f2 = function<U>(x:U):U{return x}//ES6let f3 = <U>(x:U):U=>{return x}//限制  参数的属性或方法一定是属于任何类型function hello4<T>(name:T):number{   //hello函数是泛型//name 表示是任何类型return name.length  //error  T表示为任何类型  也就是name.length是所有类型都支持的属性};function hello5<T>(name:T[]):number{   //number[]   string[]//name 数组return name.length   //};//hello5<number>([1,2,3])hello5<string >(['1','2','3'])//泛型的约束 extends//<T extends Abc> 泛型T必须符合接口ABC的形状interface LengthN{length:number}function hello6<T extends LengthN>(name:T):number{   //hello函数是泛型//name 必须有length属性的类型 return name.length  };hello6<string>('222');//数组泛型     类型+[]let arr:Array<number> =[1,2,3];var arr2:number[] = [1,2,3];//需求  创建一个数组   传入3表示数组的长度为3  具体'x'   ['x','x','x']//createArray(长度,值) //createArray(5,'a')    ['a','a','a','a','a']//createArray(2,3)    [3,3]function createArray(length:number,value:any):Array<any>{var arr = [];for(let i=0;i<length;i++){arr[i] = value};return arr;};createArray(5,'a') ;function createArray2<T>(length:number,value:T):Array<T>{var arr = [];for(let i=0;i<length;i++){arr[i] = value};return arr;};createArray2<number>(5,3) ;//多个类型参数function f6<N,S>(a:[N,S]):[S,N]{return [a[1],a[0]]};f6<number,string>([1,'a'])//泛型在类中的运用class A2<T>{n:T;constructor(num:T){this.n = num}action(x:T):T{return x}};var a2 = new A2<number>(1);

枚举

     //枚举 enum类型是对JavaScript标准数据类型的一个补充var arr7 = ['a','b','c'];arr7['a']  //不能通过键来获取,只能索引var obj = {a:1,b:2};obj[1] //不能通过索引取值enum Color {red,green,blue,'a','b','c'};var c:Color= Color.red //0  通过键取值var c2:string = Color[1] //green  通过索引取值//改变索引值enum Color2 {red=10,green,blue};var c3:Color2= Color2.green  //11//手动设置enum Color3 {red=30.7,green=20,blue=10};var c4:Color3= Color3.green //20 //任意值var c11 = 'hello';enum Color4 {red=30.7,green=<any>c11,blue=c11.length};var c5:Color4= Color4.green //hello

元组

 //元组  数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。//数组var lists:number[] = [1,2,3,4,5];var lists2:Array<string> = ['1','2'];var lists3:Array<any> = ['1','2',true,1,2];var t:[number,string] = [10,'a'];  //元组允许一个数组中可以有多个不同的类型  一一匹配

例子参考

//档位
enum Gear {First=1, Second=3, Third=5
}
enum Color {White, Red
}
//接口
interface Drivable {//启动start(): void;//驾驶drive(time: number, speed: Gear): void;//行驶距离getKilometer(): number
}
//定义一个抽象的类
//abstract  抽象的类  没有实现  不可被实例化
//定义动物类
// abstract class Animal {//     abstract eat():void;  //抽象类的子类必须实现抽象类的抽象方法
// }
// //var a = new Animal();  //error    用到了abstract修饰符,不能被实例化
// class Dog extends Animal{//     constructor(){//         super();
//     }
//     //抽象类的子类必须实现抽象类的抽象方法
//     eat(){//     }
// }abstract class Car implements Drivable {  //定义一个抽象类  来实现Drivable接口protected _isRunning: boolean;   //只能被子类访问的属性protected _distanceFromStart: number;  //只能被子类访问的属性constructor() {this._isRunning = false;this._distanceFromStart = 0;}public start() {    //公共启动汽车this._isRunning = true;}//抽象类的子类必须实现抽象类的抽象方法abstract drive(time: number, speed: Gear): void;   public getKilometer(): number {    //公共行驶距离return this._distanceFromStart;}
}
//派生类   子类
class BMW<T extends Color> extends Car {private color: Color;  //私有属性constructor(T) {super();this.color = T;}public drive(time: number, speed: Gear): void {if (this._isRunning) {this._distanceFromStart += time*speed;//行驶距离}}public getColor(): string {return Color[this.color]}
}let bmw = new BMW(Color.Red);
bmw.start();
bmw.drive(10, Gear.First);
bmw.drive(60, Gear.Third);
document.body.innerHTML = "distance:"+bmw.getKilometer()+',color:'+bmw.getColor()

TS基础2(泛型、枚举、元组)-学习笔记相关推荐

  1. TS基础2(类)-学习笔记

    文章目录 TS基础2(类)-学习笔记 class类 类的继承 修饰符 类的类型.实现接口 TS基础2(类)-学习笔记 class类 //类 class//首字母大写//类(Class):定义了一件事物 ...

  2. ES6基础5(Promise)-学习笔记

    文章目录 ES6基础5(Promise)-学习笔记 Promise 三个状态 状态转换 手写Promise源码 同步异步概念 jquery中 串行并行 async-await 微任务 宏任务 ES6基 ...

  3. ES6基础4(数据结构)-学习笔记

    文章目录 ES6基础4(数据结构)-学习笔记 set map symbol ES6基础4(数据结构)-学习笔记 set //set 数据结构 类似数组 成员信息唯一性var s = new Set() ...

  4. ES6基础3(扩展)-学习笔记

    文章目录 ES6基础3(扩展)-学习笔记 字符串扩展 数值扩展 函数扩展 扩展运算符 ES6基础3(扩展)-学习笔记 字符串扩展 //扩展//字符串扩展charAt(); //返回指定索引位置的字符 ...

  5. redis基础命令和数据操作命令学习笔记

    redis基础命令和数据操作命令学习笔记 基础命令 安装成功后,redis的启动命令:先修改配置文件.将服务改成默认运行.然后以配置文件启动服务 redis-server config/redis-c ...

  6. Github与GitKraken的基础使用(一)[学习笔记]

    Github与GitKraken的基础使用(一)[学习笔记] Git与Github 使用Github.com 1.仓库(repository) 2.创建一个repo 3.在仓库中添加文件 4. Com ...

  7. SimpleITK图像基础(三)——SimpleITK学习笔记

    SimpleITK学习笔记 前言 1 sitk中的常见属性值 2 读取和保存图像 3 像素类型 4 SimpleITK图像数据和Numpy矩阵数据之间的转换 5 访问像素和切片 6 图像重采样 7 图 ...

  8. 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)

    本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. 对测试人来说,Appium 是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS.Android 等)使用同一套 API ...

  9. Vue.js 基础语法 入门语句 Vue学习笔记 v-model 双向数据绑定

    Vue.js 基础语法,入门语句,Vue学习笔记 学习网站:https://www.bilibili.com/video/BV15741177Eh vue 的体验 响应式:数据一旦改变,视图就会响应改 ...

  10. 【李宏毅机器学习】Basic Concept 基础概念(p4) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 Review 越复杂的model,在testing data上的error未必越低. error来自两个地方: bias variance f_star是f_ha ...

最新文章

  1. 轻松看懂机器学习十大常用算法
  2. 马斯克的火箭,这次没!爆!炸!
  3. Docker网络模型(八)
  4. 换一种方式“写代码 编程序“,为自己的程序生涯找条新路
  5. jQuery常用知识点总结以及平时封装常用函数
  6. http请求头获取 -python
  7. DHTML【4】--HTML
  8. 开机时提示F1continue, F2 setup
  9. ▲▲▲▲▲▲▲▲▲▲▲yum源的配置(本地和ftp)▲▲▲▲▲▲▲▲▲▲▲▲▲v...
  10. 微信小程序 下拉刷新
  11. windows 搭建Web服务器和连接局域网打印机
  12. 海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot 移植应用 开发指南
  13. 微信公众平台实现天气预报功能
  14. 站长常用的200个js代码
  15. 带时间轴的文章归档的html页面,WordPress纯CSS打造时间轴归档页面
  16. 豆瓣读书top250数据爬取与可视化
  17. Kotlin开发利器之协程
  18. V型测试,W型测试和H型测试
  19. Matlab中ylim函数的使用
  20. linux 大牛博客,大牛

热门文章

  1. 【最详细解析】1070 结绳 (25分)_18行代码AC
  2. 【终极方法】This method must return a result of type boolean
  3. Python去线性化趋势
  4. [leetcode]106.从中序与后序遍历序列构造二叉树
  5. Python程序开发——第十章 正则表达式(ヾ(•ω•`)o那么复杂的正则表达式看完这一篇就懂啦)
  6. java运行时异常的特点是什么_Java运行时异常和非运行时异常
  7. @async注解_SpringBoot中Async异步方法和定时任务介绍
  8. mysql执行动态批处理,使用BAT批处理执行sql语句的代码
  9. Android对话框dialog大全
  10. linuxl下创建mysql用户和组_Linux中用户与用户组管理