一、基础类型

// 基础类型
(() => {// 布尔类型-----boolean//  let 变量名:数据类型 = 值let flag: boolean = true;console.log(flag);// 数字类型------------numberlet a1: number = 10; //十进制let a2: number = 0b1010; //二进制let a3: number = 0o12; //八进制let a4: number = 0xa; //十六进制console.log(a1, a2, a3, a4);// 字符串类型---------stringlet str1 = 'str1';let str2 = 'str2';console.log(`${str1}=========${str2}`);// 字符串与数字类型拼接,隐式转换为字符串类型console.log(str1 + a1);// undefined 和 null 都可以作为其他类型的子类型,把undefined和null赋值给其他类型的变量,注意要在tsconfig.ts关闭严格模式strictlet und: undefined = undefined;let nul: null = null;// let num:number = nullconsole.log(und, nul);// console.log(num);// 数组类型// 方式1:let 变量名:数据类型[] = [值1,值2,值3]let arr1: number[] = [10, 20, 30];console.log(arr1);// 方式2:泛型写法:// 语法: let 变量名:Array<数据类型> = [值1,值2,值3]let arr2: Array<number> = [11, 12, 13];console.log(arr2);// 注意:数组定义后,里面的数据类型必须都一致,否则会报错//  元组类型:在定义数组的时候,类型和数据个数是一开始就已经限定,类型和位置都必须一一对应let arr3: [string, number, boolean] = ['lemon', 666, true];console.log(arr3);console.log(arr3[0].split(''));console.log(arr3[1].toFixed(2));// 枚举类型:枚举里面的每一个数据值都可以叫元素,每一个元素都有自己的编号,编号是从0开始的,依次的递增加1enum Color {red = 1,green,blue,}// 定义一个Color的枚举类型的变量来接收枚举的值let color: Color = Color.red;console.log(color, Color.red, Color.green, Color.blue, Color[3]);// 枚举中的元素可以是中午的数据值,但是不推荐enum Gender {男,女,}console.log(Gender.男, Gender[1]);// any 类型let str: any = 100;str = 'any--';console.log(str);// 当应该数组中要存储多个数据,个数不确定、类型不确定,此时也可以使用any类型来定义数组let arr: any[] = [100, 'any-arr', true];console.log(arr);console.log(arr[1].split(''));// 对于错误的书写也不会有报错信息提示,即any是放弃类型判断的// console.log(arr[0].split(''));// void类型,在函数声明的时候,小括号的后面使用 :void,代表的是该函数没阳任何返回值function showMsg():void {return   //输出undefined// return undefined //输出undefined// return null //报错:不能将类型“null”分配给类型“void”}console.log(showMsg());// 定义void类型的变量,也可以接收一个undefined的值,但没必要let vd:void = undefinedconsole.log(vd);// object类型// 定义一个函数,参数是object类型,返回值也是object类型function getObj(obj:object):object {return {name:'lemon',age:18}}console.log(getObj({name:'lem',age:1}));// 联合类型(union Types)表示取值可以为多种类型中的一种// 需求1:定义一个函数得到一个数字或者是字符串值的字符串形式function getString(str:number|string):string {return str.toString()}console.log(getString(123));// 需求2:定义一个函数得到一个数字或字符串值的长度// 类型断言:告诉编译器,我指的是什么类型// 类型断言语法1: <类型>变量名  // 类型断言语法2: 值 as 类型function getString2(str:number|string):number {// return str.toString().lengthif ((<string>str).length) {// return (<string>str).lengthreturn (str as string).length} else {return str.toString().length}}  console.log(getString2(123456));console.log(getString2('lemon'));// 类型推断:在没有明确指定类型时,推测出一个类型let tx = 100 //number类型// tx = 'lemon-tx'  // 报错:不能将类型“string”分配给类型“number”。let tx2;  //any类型tx2 = 100tx2 = 'lemon-tx2'console.log(tx2);})();

二、接口

// 接口时对象的状态(属性)和行为(方法)的抽象(描述)
// 接口:是一种类型、一种规范、一种规则一种能力、一种约束
(() => {// 需求:创建人的对象,需对人的属性进行一定的约束// id:number类型,必须,只读// name:string类型,必须// age:number类型,必须// sex:string类型,可以没有// 定义一个接口,该接口作为person对象的类型使用,限定或者是约束该对象的的属性数据interface IPerson {// readonly:只读属性 id是只读的,是number类型readonly id: number;name: string;age: number;//  ? 可有可无sex?: string;}// 定义一个对象,该对象的类型就是定义的接口IPersonconst person: IPerson = {id: 1,name: 'lemon',age: 18,// sex: '女',  //sex可以没有};console.log(person);person.sex = '女';// person.id = 101; //无法分配到 "id" ,因为它是只读属性console.log(person.sex);
})();

三、函数类型

// 为了使用接口表示函数类型,我们需要给接口定义一个调用签名
// 就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型
(() => {// 函数类型:通过接口的方式作为函数的类型来使用interface ISeachFunc {// 定义一个调用签名(source: string, subString: string): boolean;}// 定义一个函数,该类型就是上面定义的接口const searchString:ISeachFunc = function (source:string,subString:string):boolean {// 在source字符串中查找subString这个字符串return source.search(subString) > -1}// 调用函数console.log(searchString('lemon','mon'));})();

四、类类型

// 类 类型:类的类型可以通过接口来实现
(()=>{// 定义一个接口interface IFly {// 该方法没有任何的实现(方法中什么都没有)fly()}// 定义一个类,这个类的类型就是上面定义的接口(实际上也可以理解为,IFly接口约束了当前的这个Person类)class Person implements IFly {// 实现接口中的方法fly() {console.log('lemon--fly');}}// 实例化对象const person = new Person()person.fly()// 定义一个接口interface Iswim {swim()}// 定义一个类,这个类的类型就是IFly和Iswim(当前这个类可以实现多个接口,一个类同时也可以被多个接口进行约束)class Person2 implements IFly,Iswim {fly() {console.log('lemon--fly2');}swim() {console.log('lemon--swim2');}}// 实例化对象const person2 = new Person2()person2.fly()person2.swim()// 总结:类可以通过接口的方式来定义当前的这个类的类型// 类可以实现一个接口,类也可以实现多个接口,但是接口中的内容都要真正的实现// 定义一个接口,继承其他多个接口interface IMyFlyAndSwim extends IFly,Iswim {}// 定义一个类,直接实现IMyFlyAndSwim这个接口class Person3 implements IMyFlyAndSwim {fly() {console.log('lemon--fly3');}swim() {console.log('lemon--swim3');}}const person3 = new Person3();person3.fly()person3.swim()// 接口和接口间:继承(extends),类和接口间:实现(implements)
})()

五、类

// 类:可以理解为模板,通过模板可以实例化对象
// 面向对象的编程思想
(() => {// ts中类的定义及使用class Person {// 定义属性name: string;age: number;sex?: string;// 定义构造函数:为将来实例化对象的时候,可以对属性的值进行初始化constructor(name: string = 'lemon', age: number = 18, sex: string = '女') {// 更新对象中的属性数据this.name = name;this.age = age;this.sex = sex;}// 定义实例方法sayHi(str: string) {console.log(`hi~,大家好,我是${this.name},今年${this.age},我是${this.sex}孩子`, str);}}// ts中使用类,实例化对象,可以直接进行初始化操作const person1 = new Person();const person2 = new Person('小姜', 20, '男');person1.sayHi('你呢?')person2.sayHi('很高兴认识你')
})();

六、继承

// 继承:类与类之间的关系
// 继承后类与类之间间的父子关系叫法:
// A类继承了B这个类,那么此时A类叫字类,B类叫基类
// 子类 ---》派生类
// 基类 ---》超类(父类)
(() => {// 定义一个类,作为基类(超类/父类)class Person {// 定义属性name: string; //姓名age: number;sex: string;// 定义构造函数constructor(name: string = 'lemon', age: number = 18, sex: string = '女') {this.name = name;this.age = age;this.sex = sex;}// 定义实例方法sayHi(str: string) {console.log(`hi~,${this.name},${str}`);}}// 定义一个类,继承自Personclass Student extends Person {constructor(name: string, age: number, sex: string) {// 调用的父类的构造函数,使用的是supersuper(name, age, sex);}// 可以调用父类的方法sayHi() {console.log('我是Students类中的sayHi方法');// 调用父类sayHi方法super.sayHi('你好!我是Person类中的sayHi方法');}}// 实例化Personconst person1 = new Person();person1.sayHi('很高兴认识你');// 实例化Studentconst student1 = new Student('小姜', 20, '男');student1.sayHi();// 总结:类和类之间如果要继承关系,需要用使用extends关键字// 子类中可以调用父类中的构造函数,使用的是super关键字(包括调用父类中的实例方法,也可以使用super)// 子类中可以重写父类的方法
})();

七、多态

// 多态:父类型的引用指向了子类型的对象,不同类型的对象针对相同的方法,产生了不同的行为
(() => {// 定义一个类class Animal {// 定义一个属性name: string;// 定义一个构造函数constructor(name: string) {// 更新属性值this.name = name;}// 实例方法run(distance: number = 0) {console.log(`${this.name}跑了${distance}米的距离`);}}// 定义一个字类class Dog extends Animal {// 构造函数constructor(name:string){// 调用父类的构造函数,实现子类中属性的初始化操作super(name)}// 实例方法,重写父类中的实例方法run(distance: number=5) {console.log(`${this.name}跑了${distance}米的距离`);}}// 定义另一个字类class Pig extends Animal {// 构造函数constructor(name:string){// 调用父类的构造函数,实现子类中属性的初始化操作super(name)}// 实例方法,重写父类中的实例方法run(distance: number=10) {console.log(`${this.name}跑了${distance}米的距离`);}}// 实例化父类对象const ani:Animal = new Animal('动物');ani.run()// 实例化子类对象const dog:Dog = new Dog('小狗												

TypeScript(ts)笔记总结01相关推荐

  1. TypeScript学习笔记3:运算符

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 运算符 ...

  2. TypeScript学习笔记2:数据类型

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 数据类型 ...

  3. TypeScript学习笔记1:变量赋值及书写方式

    TS 和 JS 相对比的优势 TypeScript的安装步骤.运行问题及代码的简单运行 TypeScript学习笔记1:变量赋值及书写方式 TypeScript学习笔记2:数据类型 文章目录 变量赋值 ...

  4. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  5. typeScript学习笔记day01——小肉包

    typeScript学习笔记 class1: 一.javaScript(js)的优缺点 javaScript是在微软公司和网景公司之间爆发的浏览器大战期间,由网景公司的Brendan Eich(布兰登 ...

  6. typeScript学习笔记day02——小肉包

    typeScript学习笔记 class3 : 2021.02.24 一.TS编译选项 自动编译文件 编译文件时,使用-w指令后,YS编译器会自动监视文件变化,并在文件发生变化时对文件进行重新编译. ...

  7. TypeScript入门笔记

    TypeScript入门笔记 第一章 TypeScript简介 1.1 TypeScript简介 TypeScript 是由微软开发的一款开源的编程语言,TypeScript 是 Javascript ...

  8. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比

    iOS回顾笔记( 01 )--  XIB和纯代码创建应用的对比 很多时候我们工作很久突然闲下来的时候,是不是也感到无聊过?这就是我现在的生活,不过闲一段时间也挺好,可以好好回顾一下自己以前学习iOS路 ...

最新文章

  1. 理解面向过程和面向对象的程序设计方法
  2. Equinix 位于伦敦的LD8数据中心发生严重故障
  3. 计算机软件技术大作业报告,多媒体技术大作业报告.doc
  4. 采用contentprivider扫描手机SD卡的图片资源
  5. hdu1814 Peaceful Commission
  6. 实战课堂:系统CPU高消耗的SQL筛选和最佳索引优化
  7. 翻译 - 【Dojo Tutorials】Getting Started with dojox/app
  8. Symbian c++ 在3版中实现并动态配置开机自启动
  9. Spring安全依赖查找
  10. idea 部署 web tomcat
  11. Python编程实现后剪枝的CART决策树
  12. 幂运算的O(lgn)算法
  13. 几何光学学习笔记(35)- 7.6 CIE标准色度学系统
  14. 区块链单笔交易字段解释
  15. 计算机内存五个区域,总结:计算机内存的五大区域
  16. 获取星期--蔡勒公式
  17. n+1天 吾日三省吾身
  18. 用python处理excel的基本语法_Python操作Excel学习笔记(28):条件格式
  19. 团购网站的现状和未来
  20. seo排名工具_网站排名优化常用工具

热门文章

  1. easyui部分组件使用经验
  2. 室外温度已达34度,本博客提供自助风扇服务
  3. Windows python3安装word2vec模块常见错误处理
  4. jmeter压测结果分析
  5. 修改Android手机内核,绕过反调试
  6. hive的窗口函数详解
  7. c# MVC API 获取访问者IP 并加以验证
  8. 成都有什么好的互联网公司推荐?
  9. 2020云盘点:信创云蓬勃发展,带动中国云计算市场快速增长
  10. 电脑公司 GHOST WIN10 X64 装机专业版 V2018.04(64位)