TypeScript-01基础知识

news2024/12/26 0:12:59

目录

一、ts与es、js之间的关系

二、TypeScript与JavaScript之间的区别

三、安装TypeScript编译器

四、执行typescript的步骤

五、ts的数据类型

1、类型别名

2、接口

接口 与 类型别名 的区别

3、类型断言

4、文字类型 

不常用枚举、bigint、symbol

 六、类型缩小

1、typeof  类型守卫

2、真值缩小

3、等值缩小

 4、操作符缩小

never类型


一、ts与es、js之间的关系

二、TypeScript与JavaScript之间的区别

TypeScriptJavaScript
ts是js的超集,用于解决大型项目的代码复杂性js一种脚本语言,主要用于创建动态网页
ts可以在编译期间发现并纠正错误js作为解释型语言,只能在运行时发现错误
ts是强类型的,支持静态和动态类型是弱类型的,无静态类型选项
ts最终被编译成js代码,便于浏览器理解可直接在浏览器中运行
支持模块、泛型和接口不支持模块、泛型和接口
支持es3、es4、es5以及es6+的功能不支持编译其他es3、es4、es5以及es6+的功能

三、安装TypeScript编译器

npm install typescript -g
//或
npm i typescript -g

四、执行typescript的步骤

1、进入要编译的ts文件目录下,在终端中输入:

tsc filename.ts

2、执行上述命令后会在该目录下生成一个对应的js文件,运行该文件:

node filename.js

3、ts中的优化编译

        3.1、解决ts与js中冲突问题:

tsc --init  #生成配置文件

         3.2、自动编译

tsc --watch

        3.3、发生错误的处理

tsc –noEmitOnError filename.ts

 3.4、降级编译

        在tsconfig.json配置文件里,将编译的es6编程es5

/* Language and Environment */
"target": "es5", 

 3.5、严格模式的设置(根据需求将对应的模式注解或该位false)

/* Type Checking */
"strict": true,
"noImplicitAny": true, 
"strictNullChecks": true, 

五、ts的数据类型

// 一、基元类型 Number String Boolean

let num: Number = 1;
let str: String = "hello";
let bool: Boolean = true;

// 二、数组
let arr:Number[] = [1,2,3,4]  //只用整数组成的数组
let arrTy: Array<基元类型> = [];

// 三、不希望在某些时候导致类型检查错误 => any
let data: any;    // data 可以是任何类型,这与原生的js变量一样


// 四、函数 函数的参数在大多数时候还是建议带上类型注释的,这样可以防止函数的参数变为隐式的 any 类型

function fn(num: Number){
    console.log(num)
}

// 五、对象类型  其中在obj中的属性 b 后面加一个 ? 表示该值可穿可不穿;其类型为 Number | undefined
function obgFun(obj:{a:Number,b?:Number}){
    console.log("obj.a的值为",obj.a);
    console.log("obj.b的值为",obj.b);
}
obgFun({a:1})
obgFun({a:1,b:2})

// 六、联合类型(union) :有两个或多个其他类型组成的类型
let data: Number|String;    //表示变量 data 可以是一个Number 也可以是 String。后面可以继续接其他数据类型

1、类型别名

        通过了解ts的数据类型之后,发现有时候在多次使用某种数据类型的时候(尤其是 联合类型和对象类型)就会很麻烦,这个时候可以通过关键字type将某种数据类型赋值给一个变量,这个过程就是定义类型别名。

// 定义类型 别名 
type spot = {x: Number,y: Number}
type ID= Number | String


// 使用类型别名
function printSpot(op: spot){
    console.log(op)
}
printSpot({
    x: 1,
    y: 6
})        // 打印结果 {x: 1, y: 6}

2、接口

        接口的作用其实跟类型别名是一样的,都是重新定义类型。

// 接口的定义和使用与 类型别名 几乎差不多
interface spot {
    x: Number,
    y: Number
}


// 使用接口
function printSpot(op: spot){
    console.log(op)
}
printSpot({
    x: 1,
    y: 6
})        // 打印结果 {x: 1, y: 6}

接口 与 类型别名 的区别

        相同点:

                两者都是用来定义数据类型的

        不同点:

                在扩展数据类型的方式上不同<接口通过关键字 extends 去扩展数据类型,类型别名则是通过 & 去实现扩展的;接口通过重复定义实现添加,但类型别名不可以,类型别名只能通过 & 去添加>        

Tip: 所有可以使用接口定义的类型,可以使用类型别名去定义。

// 接口定义数据类型
interface Person {
    name: String
}
// 接口扩展数据类型
interface man extends Person{
    name: String,
    sex: String
}
// 接口的另一种扩展方式 => 重复定义(类型别名不可以使用这种方式)
interface man {
    name: String
}

interface man {
    sex: String
}

// =======================================================

// 类型别名 定义数据类型
type Person = {
    name: String
}
// 类型别名 扩展数据类型
interface man = Person & {
    name: String,
    sex: String
}

3、类型断言

        类型断言是指在不确定某个变量的类型时,给其指定一个确切的类型。

// 使用 as 语法 或是 在变量前面添加 <具体数据类型> 来完成数据断言

let canvasData = document.getElementById("canvased") as HTMLCanvasElement;

// 或
let canvas = <HTMLCanvasElement>document.getElementById("canvased");

4、文字类型 

        文字类型 跟JS中的 常量 很像。就是定义完变量就不再允许变量的值被修改。

// 字符串文字类型
let a: "hello" = "hello"    // 变量a 只能是 hello,不允许被修改,如果重新赋值会报错

// 数值文字类型 这里函数的返回值只能是0 1 -1,如果返回其他值就会报错
function returnNum(Numa:Number,Numb:Number): 0|1|-1{
    return Numa > Numb ? 1 : Numa === Numb ? 0 : -1
}

// 布尔文字类型
let BoolA: true = true   // 变量BoolA的值只能是true
let BoolB: false= false  // 变量BoolB的值只能是false


// 文字类型的联合使用 (比较重要,文字类型使用的注意场景)
function request(url: String,method: 'GET'|'POST'|'PUT'){
    console.log("请求的url为:",url)
}

let req = {
    url: "http://127.0.0.1:8080",
    method: "GET" // as 'GET'
}  // as const

request(req.url,req.method)    // 这样直接使用会报错,因为在定义req 的时候req.method被推断为字符串,与方法中的method的文字类型不一致
request(req.url,req.method as "GET") //使用的时候加上类型断言

不常用枚举、bigint、symbol

// 定义枚举
enum position = {
    top:1,
    bottom,
    left,
    right
}
console.log(position.top)    // 打印 1
console.log(position.bottom)    // 打印 2 自动累加赋值

// bigint 表示一个非常大的数值
let Num: bigint = BigInt(100)

// symbol 唯一的值
let Fname = symbol("name");

 六、类型缩小

        类型缩小主要是将宽类型范围转换为窄类型范围,主要是应在 联合类型 的使用上面。

1、typeof  类型守卫

        使用typeof去做数据类型的判断,从而达到类型缩小的目的(注意类型object与null的关系有时候类型为object的变量可能会隐式转换为null)

2、真值缩小

function returnData(data: String | String[] | null){
// 这里如果 typeof data === 'object'判断的话,就会报错,因为 data 也可以推断为 null,但是如果使用 data && typeof data === 'object'进行判断就排除了 data 为null的情况(真值缩小)
    if(data && typeof data === 'object'){    
        for(const i of data){
            console.log(i);
        }
    }else if(typeof data === 'string'){
        console.log(data);
    }else{
        // ....
    }
}

3、等值缩小

        利用等于 或 不等于(===、==、!==、!=)的运算符去判断数值之间的关系,从而达到类型缩小(尤其是==与!=,在某些特定的场景下,可以过滤出undefined与null)

 4、操作符缩小

        使用操作符 in instanceof去判断数据是否被包含在某个范围内是否为某一个对象的实例从而达到类型缩小的目的。

never类型

        never类型可以分配给每个类型;但是,没有任何类型可以分配给never(除了never本身)。这意味 着你可以使用缩小并依靠 never 的出现在 switch 语句中做详尽的检查(可在判断中进行穷尽性检查)。

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

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

相关文章

Linux socket 编程 UDP

套接字&#xff1a;操作系统向上层提供的用于实现网络通信的统称 网络通信其实本质上就是两台主机之间的通信其中一段是客户端&#xff0c;另一端是服务器 客户端&#xff1a;用户的一端&#xff0c;客户端是主动发出请求的一端 服务端&#xff1a;针对用户请求提供服务的一端…

Linux 进程控制

&#x1f9d1;‍&#x1f4bb;进程控制 &#x1f9d1;‍&#x1f4bb; 文章目录&#x1f9d1;‍&#x1f4bb;进程控制 &#x1f9d1;‍&#x1f4bb;一、进程创建1. fork函数2. fork常规用法3. fork创建子进程操作系统都做了什么&#xff1f;4. 写时拷贝5. 父子进程代码的共享…

String(二)————迭代器及相关接口使用

目录 string构造接口&#xff08;Construct string object&#xff09; string的元素访问&#xff08;读写&#xff09; 迭代器 string构造接口&#xff08;Construct string object&#xff09; string相比于C语言的字符数组要好用的多&#xff0c;无论是在初始化还是在读写…

排序5:直接选择排序

目录 排序思想&#xff1a; 演示图&#xff1a; 代码实现 总结&#xff1a; 排序思想&#xff1a; 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素&#xff0c;则将它与这组元素中的最后一个&#xff08;第一个…

SpringMVC---->自我实现底层机制(吃透springMVC)

目录 配套代码在资源中&#xff08;免费&#xff09; maven环境搭配 注解注入的规范&#xff1a; 一.开发HongDisptcherServlet前端控制器 1.说明&#xff1a; 2.配置web.xml文件 3.检查前期工作是否成功 二.完成客户端/浏览器请求控制层 1.创建 自己的 Controller 和…

【HTML+CSS+JS】模仿QQ登录界面

目录前言简介布局思路相关代码颜色渐变动画头像表单区域JS相关总结前言 学了HTML、CSS和JS有了一个月了&#xff0c;JS还未学完&#xff0c;偷懒写一个小项目&#xff0c;用了一个下午&#xff0c;顺便巩固一下所学知识。&#xff08;内容比较简陋&#xff0c;适合新手&#x…

基于火鹰优化算法的函数寻优算法

文章目录一、理论基础1、火鹰优化算法2、FHO算法伪代码二、仿真实验与结果分析三、参考文献一、理论基础 1、火鹰优化算法 文献[1]提出了火鹰优化算法(Fire Hawk Optimizer, FHO)作为一种新的元启发式算法&#xff0c;该算法基于啸鸢、麻鹰和褐隼的觅食行为&#xff0c;这些鸟…

【网络原理】网络编程Socket套接字基础知识汇总

目录 1.网络初始&#xff1a; 2.网络编程&#xff1a; 3.UDP数据报套接字&#xff1a; 4.TCP流套接字&#xff1a; 1.网络初始&#xff1a; 局域网&#xff08;LAN&#xff09;广域网&#xff08;WAN&#xff09;IP地址用于定位主机的网络地址。端口号可以标识主机中发送数…

数据结构六:堆

前言&#xff1a;上一篇我们讲了二叉树&#xff0c;你知道吗&#xff1f;堆的底层是一棵完全二叉树。这样说会不会就会觉得熟悉了。 目录 1.堆的概念及存储方式 2&#xff1a;堆的创建 2.1:向下调整 3.堆的插入和删除 3.1&#xff1a;堆的插入 3.2&#xff1a;堆的删除 …

基于Web的商城后台管理系统的设计与实现

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Oracle和MySQL查询所有的表信息和字段信息

Oracle和MySQL查询所有的表信息和字段信息1. MySQL1.1 查询表1.2 查询字段1.2.1 方式1->SHOW FULL COLUMNS1.2.2 方式2->information_schema.COLUMNS1.3 查表和字段1.4 查表和字段-->转程Oracle需要的数据类型2. Oracle2.1 查表和字段的单表查询2.2 整理查表和字段的s…

超详细的JUnit单元测试介绍

前言 本文为JUnit单元测试相关知识&#xff0c;下边将对JUnit单元测试概念&#xff0c;JUnit优点&#xff0c;JUnit安装与使用&#xff0c;JUnit运行流程与常用注解&#xff0c;JUnit测试套件使用及参数化设置&#xff0c;JUnit断言等进行详尽介绍~ &#x1f4cc;博主主页&…

大数据Hadoop之——Apache Hudi 与 Presto/Trino集成

文章目录一、概述二、Trino 环境部署1&#xff09;安装JDK2&#xff09;安装python3&#xff09;安装Trino1、下载解压并配置环境变量2、修改配置3、启动服务4、测试验证三、在Hive中创建表关联Hudi表1&#xff09;添加jar包2&#xff09;创建库表关联Hudi四、Hudi 与 Trino集成…

SpringCloud Alibaba系列 Sentinel(三)

高并发下的微服务容错方案&#xff1f; 限流、熔断、降级 1&#xff1a;限流 在高并发系统中一定要用&#xff0c;高并发的所有请求进来&#xff0c;不是让每个请求都打到后台集群的&#xff0c;后台集群有它的消费能力&#xff0c;应该在它消费能力之内放行请求&#xff0c;…

Hadoop HA集群全是standBy解决办法

文章目录原理解决方案原理 hadoop集群配置HA后&#xff0c;会存在多个namenode&#xff0c;但是同一时间仅有一台NN为Active的状态&#xff0c;其他NN都是StandBy的状态。 上图是hadoop集群配置HA的原理图&#xff0c;从上图我们可以看到多个NN的状态切换&#xff0c;是依靠Z…

linux命令与makefile学习

linux命令与makefile学习文件权限通配符*常用命令makefilegcc与g区别&#xff1a;Linux上有一句话&#xff1a;一切皆文件 普通文件 “-” 目录文件 “d” &#xff08;directory&#xff09; 管道文件 “p” &#xff08;piping&#xff09; 链接文件“l” &#xff08;li…

SAP FICO银行账户余额查询表开发说明书(包括开发源代码、测试样例及FS)

程序说明 满足财务银行账户余额查询明细的需求; 支持财务实时查看银行余额数据。 筛选界面 序号 栏位标题 字段类型 是否必须 是否为范围

【pwn】2022 祥云杯 部分wp

【pwn】2022 祥云杯 部分wp 前言 又是一年的祥云杯&#xff0c;相比去年我啥也不会写&#xff0c;今年起码写了几个签到… 又被队友带飞咯 protool Google的Protobuf&#xff0c;参考学习连接 https://bbs.pediy.com/thread-270004.htm 发现了栈溢出&#xff0c;protobuf…

Unity技术手册-UGUI零基础详细教程-Toggle切换

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 本文约3千字&#xff0c;新手阅读需要7分钟&#xff0c;复习需要2分钟 【收藏随时查阅不再迷路】 &#x1f449;关于作者 众所周知&#…

2.6 Python 基本数据类型

1. 数据类型 类型是变量所指的内存中对象的类型. 内置的type()函数可以用来查询变量所指的对象类型。Python 3中有六个标准的数据类型: Numbers(数字), String(字符串), List(列表), Tuple(元组), Sets(集合), Dictionary(字典).2. Numbers 数字型 Python 有三种数字类型 in…