typescript 相关概念

news2024/12/25 12:44:19
  1. TypeScript 开发环境搭建

    1. 下载Node.js

      1. 14.15.1版本64位:https://nodejs.org/dist/v14.15.1/node-v14.15.1-x64.msi

      2. node官网: Node.js
    2. 安装Node.js

    3. 使用npm全局安装typescript

      1. 进入命令行

      2. 输入: npm i -g typescript

    4. 创建一个ts文件

    5. 使用tsc对ts文件进行编译

      1. 进入命令行进入

      2. ts文件所在目录

      3. 执行命令:tsc 文件名.ts

  2. typtscript类型

    1. 类型声明

      1. 通过类型声明可以指定TS中变量(参数、形参)的类型

      2. 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错

      3. 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值

      4. 语法:

        let 变量:类型;
        let 变量:类型 = 值;
        function fn(参数:类型,参数:类型):类型{
        	...
        }
    2. 自动类型判断

      1. typescriptTS拥有自动的类型判断机制

      2. 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型

      3. 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明

    3. ts类型

      1. 常用类型

      2. 类型定义:

        1. 字面量:用| 表示或

        2. any: 设置any相当于对该变量关闭了ts检测。可以赋值给其他变量,影响其他变量的类型 --- 避免使用

        3. unknown:表示位置的类型的值。他不能赋值其他类型的值。

          1. 解决:可以对unknown的值进行类型判断

        4. 类型断言:可以用来告诉解析器变量的实际类型

          1. 语法: 变量 as 类型

          2. <类型> 变量

        5. void:用来表示为空,主要表示函数返回值为空,返回null也是表示为空

        6. never:表示永远不会返回结果

        7. {}:用来指定对象包含哪些属性

          1. 语法:{属性:属性值} eg: let b : {name: string}

          2. 在属性后加?,表示属性是可选的 eg:let b : {name: string, age?: number }

          3. 属性后面加任意:eg: let b : {name: string, [propName: string]: any }

        8. 设置函数结构的类型声明

          1. 语法:(形参:类型,形参:类型,...)=> 返回值

          2. eg:let d: (a:number, b:number) => number

        9. 数组表示:

          1. 表示:类型[]

            1. let e:string[]; 表示字符串 ;

            2. let f:number[]; 表示数字的数组

          2. 表示:Array<类型>

            1. let g: Array<number>

        10. 元组,元组就是固定长度的数组

          1. 写法:h: [string, string]; h = ['a', 'b']

        11. 枚举:enum

          1. 写法: let i : {name:string,gender:string}

          2. enum Gender{male=0,femal=1}

      3. 拓展:

        1. &:表示同时:let j: { name: string } & { age: number };

        2. |:

          1. 使用

          2. 类型的别名

            type myType = 1|2| 3|4| 5;
            let k: myType;

  3. 编译选项

    1. 自动编译文件

      1. 编译文件时,使用 -w 指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。

      2. 示例:tsc xxx.ts -w

    2. 自动编译整个项目

      1. 如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。

      2. 但是能直接使用tsc命令的前提时,要先在项目根目录下创建一个ts的配置文件 tsconfig.

      3. jsontsconfig.json是一个JSON文件,添加配置文件后,只需只需 tsc 命令即可完成对整个项目的编译

      4. 配置选项:在tsconfig.json文件

        1. include

          1. 定义希望被编译文件所在的目录

          2. 默认值:["/*"]

          3. **示例:

            1. "include": ["src//", "tests/**/"]

            2. 上述示例中,所有src目录和tests目录下的文件都会被编译

        2. exclude

          1. 定义需要排除在外的目录

          2. 默认值: ["node_modules", "bower_components", "jspm_packages"]

          3. 示例:

        3. compilerOptions

          1. 编译选项是配置文件中非常重要也比较复杂的配置选项

          2. 在compilerOptions中包含多个子选项,用来完成对编译的配置

            1. 项目选项

              1. target

                1. 设置ts代码编译的目标版本

                2. 可选值:ES3 (默认)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext

                3. 示例:compilerOptions": {"target": "ES6"}

                4. 如上设置,我们所编写的ts代码将会被编译为ES6版本的js代码

              2. lib

                1. 指定代码运行时所包含的库(宿主环境)

                2. 可选值:ES5、ES6/ES2015、 ES7/ES2016、ES2017、ES2018、 ES2019、ES2020、 ESNext、 DOM、WebWorker、 ScriptHost

                3. 示例:{"lib": ["es6", "DOM"]}

              3. outDir

                1. 用来指定编译后文件所在目录

                2. 可选值:

                3. 示例:

              4. outFile --- 用的不多

                1. 将代码合并为一个文件

              5. allowJS

                1. 是否对js文件进行编译,默认为false

              6. checkJS

                1. 是否检查js代码是否符合语法规范

              7. removeComments:

                1. 是否移除注释

              8. noEmit:

                1. 不生成编译后的文件

  4. 类的介绍

    1. 属性的定义:

      1. 实例属性: p.name

      2. 类属性:Person.name

        1. eg: readonly name:string = 'zhangsan'

    2. 方法的定义:

      1. 实例方法:p.learn()

      2. 类方法:Person.learn()

      3. 构造函数

        1. 属性直接在类中定义

        2. 赋值是在类的构造函数赋值的:constructor(){}

          class Person {
          	name: string,
          	age: number,
          	
          	constructor(name:string, age:number){
          		// this表示当前对象的实例对象
          		this.name = name;
          		this.age = age;
          	}
          	
          	eat(){
          		console.log('吃饭')
          	}
          }
          
          
          const p1 = new Person(name: 'zhangsan', age: 18);
          const p2 = new Person(name:'lisi', age: 30);
          
          p1.eat();
  5. 继承

    1. Dog extends Animal

      1. 此时,Animal被称为父类,Dog被称为子类

      2. 使用继承后,子类将会拥有父类所有的方法和属性-

      3. 通过继承可以将多个类中共有的代码写在一个父类中,

        1. 这样只需要写一次即可让所有的子类都同时拥有父类中的属性

        2. 如果希望在子类中添加父类中没有的属性或方法,直接加就行

        3. 如果不满足父类中的方法,可以在本类中做重写(这种子类覆盖掉父类方法的形式,就是方法的重写)

      4. 父类也叫做超类,super

        class Animal {
        	name: string;
        	constructor(name: string) {
        		this.name = name;
        	}
        	sayHello() {
        		console.log('在说话');
        	}
        }
        
        
        class Dog extends Animal{ 
        	age: number;
        	constructor(name: string,age:number){
        		// 如果在子类中写了构造函数,在子类构造函数必须对父类构造函数进行调用
        		super();   // 调用父类构造函数
        		this.age = age;
        	}
        	sayHello() {
        		// 在类的方法中 super就表示当前类的父类
        		//super.sayHello();
        		console.log('汪汪汪')
        	}
        }
        
        const dog = new Dog(name:'阿黄',age: 3);
      5. 抽象类

        1. 以abstract开头的类是抽象类,抽象类和其他类区别不大,只是不能用来创建对象抽象类就是专门用来被继承的关

        2. 作用:不能被创建实例

        3. 特点:可以创建抽象方法,通用方法

        4. 抽象方法:

          1. 定义一个抽象方法

          2. 抽象方法使用 abstract开头,没有方法体

          3. 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写

            abstract class Animal {
            	name: string;
            	constructor(name: string) {
            		this.name = name;
            	}
            	
            	abstract sayHello():void;
            }
          4. 子类需要重写父类的抽象方法

  6. 定义接口:interface

    1. 描述一个对象类型(使用别名) ----- 只能声明一个

      abstract class Animal {
      	name: string;
      	constructor(name: string) {
      		this.name = name;
      	}
      	
      	abstract sayHello():void;
      }
    2. 接口用来定义一个类结构(使用interface) ---- 可以声明多个

      interface myInterface{
          name: string;
          age: number;
      }
      interface myInterface{
          gender: string;
      }
      ​
      const obj: myInterface = { 
          name: 'sss',
          age: 111,
          gender:'男'
      };

      注意:接口中的所有属性都不能有实际的值,接口值定义对象的结构,而不考虑实际的值。在接口中定义的方法都是抽象方法

    3. 定义类时,可以使类去实现一个接口,实现接口就是使类满足接口的要求

    4. 作用:接口主要是对类的定义规范

  7. 泛型:

    1. 在定义函数或是类时,如果遇到类型不明确就可以使用泛型

      function fn<T>(a:T):T{
          return a;
      }
    2. 可以直接调用具有泛型的函数

      1. 不指定泛型:fn(a:10);

      2. 指定泛型:fn<string>(a: 'hellow');

    3. 可以传多个参数

      function fn2<T, K>(a: T, b: K):T{
      	console.log(b);
      	return a;
      }
      fn2<number, string>(a: 123, b: 'hello');
    4. 可以使用interface:T extends Inter 表示泛型T必须是Inter实现类(子类)

      interface Inter{
      	length: number;
      }
      function fn3<T extends Inter>(a: T): number{ 
      	return a.length;
      }
      
      fn3( a: 10);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/609334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0-1一起学习live555设计思想之一 基础运行环境 + 任务调度

系列文章目录 文章目录 系列文章目录前言一、基础组件总览二、UsageEnvironment三、BasicUsageEnvironment0四、BasicUsageEnvironment五、TaskScheduler六、BasicTaskScheduler0七、DelayQueue八、BasicTaskScheduler九、基础调度总结总结前言 一、基础组件总览 本篇开始分析…

【OpenCV • c++】滑动条的创建和使用

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

【Linux网络服务】Nginx Rewrite重写模块

Nginx Rewrite 一、常用的Nginx 正则表达式二、location 匹配的范围2.1location实验 三、rewrite模块3.1rewrite跳转3.2rewrite执行顺3.3flag标记说明3.4rewrite中常用的全局变量3.5rewrite实验3.5.1 基于域名的跳转3.5.2基于客户端IP访问跳转3.5.3基于旧域名跳转到新域名后面加…

基于深度学习的高精度海洋生物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度海洋生物检测识别系统可用于日常生活中检测与定位海洋生物目标&#xff08;海胆&#xff1a;echinus&#xff0c;海参&#xff1a;holothurian&#xff0c;扇贝&#xff1a;scallop&#xff0c;海星&#xff1a;starfish&#xff09;&…

MySQL数据库 番外.聚合函数

前言&#xff1a; 聚合函数是分组查询中一个重要的组成部分&#xff0c;想要利用分组查询&#xff0c;就要对聚合函数有不错的掌握&#xff0c;因此我们在这里开一篇番外&#xff0c;讲解SQL语法中的聚合函数 聚合函数&#xff1a; 聚合函数是SQL中一种特殊的函数&#xff0c;…

Oracle中的数据导出(4)

目录 法一&#xff1a;使用SQL plus命令脚本 法二&#xff1a;使用PLSQL Developer工具 前几篇文章描述了如何将Oracle中的数据导出到库外&#xff0c;但是导出的数据结果都是文本文档&#xff0c;这样页面查看不和谐&#xff0c;编辑又略显麻烦。因此这篇文章将描述如何将Or…

60题学会动态规划系列:动态规划算法第二讲

都是路径问题~ 文章目录 1.不同路径2.不同路径II3.礼物的最大价值4.下降路径最小和5.最小路径和 1.不同路径 力扣链接&#xff1a;力扣 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一…

异常检测学习笔记 一、异常检测及基本统计

一、什么是异常? 1、异常的定义 异常是指与其他数据有很大不同的数据。异常现象是“一种与其他观测结果大相径庭的观测结果,以至于人们怀疑它是由不同的机制产生的。”,也被称为“异常”或“离经叛道”。 所有观测值 = 正常数据 + 异常值 异常值 = 噪声 + 异常 噪声 = 人们…

scratch接水果 少儿编程 电子学会图形化编程scratch编程等级考试二级真题和答案解析2023年5月

目录 scratch接水果 一、题目要求 1、准备工作 2、功能实现 二、案例分析

操作系统复习2.3.5-管程

引入管程 PV操作困难&#xff0c;容易书写出错&#xff0c;引入管程&#xff0c;作为一种高级同步机制 组成 局限于管程的共享数据结构说明对该数据结构进行操作的一组过程对局部于管程的共享数据结构设置初始值的语句管程有一个名字 基本特征 局限于管程的数据只能被局限…

括号匹配(使用链栈实现)

目录 0. 前言1. 括号匹配——题目描述2. 解题思路3. 括号匹配意义 0. 前言 数据结构——括号匹配(使用链栈实现) 操作系统&#xff1a;Windows10 家庭版 开发环境&#xff1a;Dev-Cpp 1. 括号匹配——题目描述 给定一个只包含括号的字符串s&#xff0c;判断这个字符串中的…

【图】单源最短路径

最短路径 图上的最短路径&#xff1a;两顶点之间经过的边数最少的路径&#xff1b; 网上的最短路径&#xff1a;两顶点之间经过的边上权值之和最少的路径&#xff08;源点->终点&#xff09;。 a星算法、迪杰斯特拉算法、佛洛依德算法。 迪杰斯特拉算法 单源最短路径按…

SpringBoot项目登录并接入MFA二次认证

MFA多因素认证(Multi-Factor Authentication )&#xff1a; 一些需要身份认证的服务&#xff08;如网站&#xff09;&#xff0c;为了提升安全性&#xff0c;通常会在账号密码登录成功后&#xff0c;要求用户进行第二种身份认证&#xff0c;以确保是正确用户登录&#xff0c;避…

【C语言】C预处理器(宏、文件包含、条件编译...)

一、C语言编译的预处理阶段1.1 C语言的编译过程1.2 C语言编译的预处理 二、C语言 宏2.1替换常量2.2函数宏2.3 字符串化和连接&#xff1a;#和##2.4 变参宏 三、文件包含&#xff1a;#include3.1 写法3.2 头文件的作用——声明3.3 头文件和extern 、static 四、 其他指令4.1 #un…

Ansible基础4——变量、机密、事实

文章目录 一、变量二、机密2.1 创建加密文件2.2 查看加密文件2.3 编辑加密文件内容2.4 加密现有文件2.5 解密文件2.6 更改加密密码 三、事实3.1 收集展示事实3.2 展示某个结果3.3 新旧事实命令3.4 关闭事实3.5 魔法变量 一、变量 常设置的变量&#xff1a; 要创建的用户要安装的…

【C++ 基础篇:19】:类的构造函数与初始化列表:用法说明及构造函数的细节内容补充!

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

Kubernetes_容器网络_循序渐进地学习kubernetes网络

文章目录 前言一、Linux网络命名空间1.1 linux网络命名空间1.2 不同网络命名空间的通信两个网络命名空间通信多个网络命名空间通信 二、K8S Pod网络通信2.1 Pod内部容器的网络通信2.2 相同node: 不同pod间的网络通信2.3 不同node: 不同pod间的网络通信2.4 容器网络插件: Flanne…

C++STL库之map

文章目录 关于仿函数stackdeque&#xff08;双端对列&#xff09;queuepriority_queuemap(重点)set(去重) 关于仿函数 //C不能重载的运算符sizeof、 ::、 ? :、 .、 *、 class Add { public:int operator()(int a, int b)const{return a b;} }; //函数对象&#xff0c;仿函数…

EDA数字钟(三)

文章目录 前言一、设计内容二、模块结构三、代码编写1、顶层模块Digclk2、状态控制模块Ctrl3、按键消抖模块Filter4、计时模块Time5、闹钟模块Alarm6、显示模块Display7、数码管驱动模块Smg 四、测试文件五、波形仿真总结 前言 再次编写数字钟Verilog程序&#xff0c;使其符合…

数据迁移工具,用这8种就够了

前言 最近由于工作需要需要进行数据迁移&#xff0c;那么ETL数据迁移工具该用哪些呢&#xff1f; ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。…