【TypeScript】认识TypeScript

news2024/11/28 2:38:40

❤️ Author: 老九
☕️ 个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏:

文章目录

  • TypeScript
    • Javascript的缺点
    • 使用TypeScript重构
    • TypeScript的编译环境
      • 全局安装TS编译环境
      • TS编译简化
    • TS变量的声明
      • TS变量类型推导
      • 数据类型
        • Javascript数据类型
        • TypeScript数据类型
    • TS函数类型
      • 匿名函数的参数是否需要添加类型
      • 可选类型
      • Any类型
      • unknown类型
      • void类型

TypeScript

Javascript的缺点

function getLength(args){
  return args.length
}

// 调用函数
console.log(getLength("aaaa"));
console.log(getLength(["abc","cba","nba"]));
//这个就错误了,正常在编写代码的时候就要看到这个错误
console.log(getLength(123))
console.log(getLength())

Typescript就是为了解决JavaScript缺失类型检测机制的痛点,因为错误被发现的时机是越早越好

发现错误时机的顺序
写代码时候>代码编译时>代码运行期间>测试期间>上线后发现错误

TypeScript是拥有类型的JavaScript超集,还加了一些语法的扩展(枚举,元组等),TypeScript最终被编译为Javascript,不用担心兼容的问题

使用TypeScript重构

在这里插入图片描述
这样直接就在编写代码的时候就可以发现错误了

TypeScript的编译环境

我们需要先编写main.ts代码,然后将main.ts代码编译成main.js代码,之后再在浏览器上运行
如果不安装TS的编译环境,对编写代码来说是没有关系的,但是不能在浏览器上跑,因为浏览器只认识JS代码

全局安装TS编译环境

在这里插入图片描述
测试代码:

//string:TS给我们定义标识符的,提供的字符串类型
//String:JS中字符串的包装类
let message : string = "Hello world"

执行ts代码的步骤:
1.先把TS代码编译:tsc xxx.ts
2.执行刚才编译出来的js

TS编译简化

两种解决方案
在这里插入图片描述

如何安装ts-node?
npm install ts-node -g
npm install tslib @types/node -g
如何执行?
ts-node math.ts

TS变量的声明

var/let/const 变量名 : 数据类型 = 赋值
在这里插入图片描述

TS变量类型推导

在声明一个变量时,如果有直接进行赋值,会根据赋值的类型推导出变量的类型注解
在这里插入图片描述
注意:let类型进行推导,推导出来的是通用类型;但const类型进行推导,推导出来的是字面量类型
在这里插入图片描述
在这里插入图片描述

数据类型

Javascript数据类型

number:不区分int和double,统一为number类型
boolean:true和false,最简单
string:单引号双引号都可以,同时也支持模板字符串拼接变量

let name : string = "why"
let age : number = 18
let height : number = 1.88

let info : string = `my name is ${name} ,  age is ${age} , height is ${height}`
console.log(info);

export { };

symbol类型:通常我们在对象中是不能添加相同的属性名的,但是通过symbol,我们可以定义相同的名称
在这里插入图片描述
null类型
undefined类型

TypeScript数据类型

数组类型:有两种写法,第一种是string[],第二种是Array< T >,如果数组存放不同的类型,就用any

对象类型:通过type关键字定义对象里面的属性类型
在这里插入图片描述
any类型:可以代表任意类型,类似于Java中的Object类型

TS函数类型

函数的参数可以有类型,函数的返回值也可以有类型
返回值类型可以明确的指定,也可以自动进行类型推导
在这里插入图片描述

type LyricType = {
  time : number
  text : string
}
function parseLyric() : LyricType[]{
  const lyrics : LyricType[] = []
  lyrics.push({time:111,text:"愛してる"})
  return lyrics
}
const lyricInfos = parseLyric()
for(const item of lyricInfos){
    console.log(item.time,item.text);
}
export { }

匿名函数的参数是否需要添加类型

结论:最好不要添加类型注解,因为TS根据上下文就已经可以自动指定类型了,咱们自己添加还有可能添加错误

可选类型

可选类型,变量后面加一个?,代表可以传这个参数也可以不传这个参数
在这里插入图片描述

Any类型

当我们无法确定一个变量的类型,并且可能它会发生一些变化,这个时候我们可以使用any类型
any类型不限制变量的任意类型,和在JS中写代码无区别

使用时机:
当服务器返回的数据嵌套层级过于复杂,数据类型过于冗余,可以使用any关键字
在这里插入图片描述

unknown类型

unknown是TS中描述类型不确定的变量,和any的区别是,unknown类型的值上不能做任何操作,例如下面代码中的.length就是不行的
在这里插入图片描述
那unknown类型有什么用呢?
unknown要求我们必须进行类型校验(类型缩小),才能根据缩小之后的类型,进行对应的操作;所以和any不同的是,unknown类型的变量,需要进行类型校验,才能执行对应的操作,而any有安全隐患;unknown类型相当于更加安全的any类型
在这里插入图片描述

void类型

1.在TS中如果一个函数没有任何的返回值,那么返回值的类型是void类型
2.返回void类型的函数的参数,最好加上参数的类型,否则有可能报错
3.如果返回值是void类型,那么我们也可以返回undefined(一般我们不这么做)

使用场景:
1.

在这里插入图片描述


♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章

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

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

相关文章

视频会议系统方案报价

视频会议系统 报价方案是咨询视频会议系统价格用户所关注的&#xff0c;但是报价是一个比较细致的工作&#xff0c;需要从多维度进行对比。 1. 视频会议终端设备费用&#xff1a;根据所需设备的数量和所选设备价格确定。视频会议终端类型各异&#xff0c;摄像头、麦克风、显示设…

文件上传漏洞实战getshell

目录 0x01 信息收集 0x02 寻找接口 0x03 拼接路径 0x04 权限 0x01 信息收集 通过fofa&#xff0c;子域名收集等相关工具搜索域名 定位到站点&#xff1a;htps://xx..edu.cn/x/xx/ 0x02 寻找接口 通过f12寻找相关的js&#xff0c;发现有其他的页面 0x03 拼接路径 https://xx…

【C语法学习】16 - fclose()函数

文章目录 1 函数原型2 参数3 返回值4 示例 1 函数原型 fclose()&#xff1a;关闭已打开的文件&#xff0c;并刷新缓冲区&#xff0c;函数原型如下&#xff1a; int fclose(FILE *stream);2 参数 fclose()函数只有一个参数stream&#xff1a; 参数stream是一个指向FILE类型结…

curl(三)传递数据

一 基础铺垫 ① form表单回顾 关注&#xff1a; from表单涉及method、content-type enctype和Content-type有什么关系 ② Content-Type 思考&#xff1a;数据传输格式和解析类型不一致导致哪些特性? ③ application/x-www-form-urlencoded 1、GET方式 2、POST方式 ④ …

佳易王电玩手柄游戏厅倒计时语音提醒软件试用下载

佳易王电玩手柄游戏厅倒计时语音提醒软件试用下载 一、佳易王电玩PS5游戏厅计时计费软件部分功能简介&#xff1a; 1、计时计费功能 &#xff1a;开台时间和所用的时长直观显示&#xff0c;每3秒即可刷新一次时间。 2、销售商品功能 &#xff1a;商品可以绑定桌子最后一起结…

VUE2和VUE3思维导图知识体系总结大对比

VUE2知识体系 VUE3知识体系 思维导图原件下载地址

3.22每日一题(二重积分求平面区域面积)

先复习求平面积分的公式 注&#xff1a;面对平面积分直接使用二重积分对1求积分即可&#xff1b;所以只需要背二重积分的两个公式&#xff1a; 1、直角坐标下对1积分 2、极坐标下对1积分 xy-1是等轴双曲线&#xff01;&#xff01; 1、先画图定区域 2、选择先对x积分还是先对…

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

一分钟精华速览 分布式链路追踪系统在企业的APM体系中扮演着重要的角色。本文分享了去哪儿旅行构建分布式链路追踪系统的实践经验。从APM整体架构设计入手&#xff0c;讲述了日志收集、Kafka传输和Flink任务处理等环节的性能优化实践和踩坑经验。 同时&#xff0c;作者结合丰…

4 sql语法基础

1、DISTINCT 相同值只会出现一次。它作用于所有列&#xff0c;也就是说所有列的值都相同才算相同。 2、LIMIT 限制返回的行数。可以有两个参数&#xff0c;第一个参数为起始行&#xff0c;从 0 开始&#xff1b;第二个参数为返回的总行数。 返回前 5 行: SELECT * FROM myt…

FFmpeg直播能力更新计划与新版本发布

// 编者按&#xff1a;客户端作为直接面向用户大众的接口&#xff0c;随着技术的发展进化与时俱进&#xff0c;实现更好的服务是十分必要的。FFmpeg作为最受欢迎的视频和图像处理开源软件&#xff0c;被相关行业的大量用户青睐&#xff0c;而随着HEVC标准的发布到广泛使用&am…

Canvas雷达显示图,动态扫描

做卫星项目的时候&#xff0c;会涉及到雷达图&#xff0c;用于扫描卫星&#xff0c;给人形象化的感觉。以下代码为canvas实现的demo&#xff0c;请运行查看. 效果图 源代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8&qu…

路由器基础(十二):IPSEC VPN配置

一、IPSec VPN基本知识 完整的IPSec协议由加密、摘要、对称密钥交换、安全协议四个部分组成。 两台路由器要建立IPSecVPN连接&#xff0c;就需要保证各自采用加密、摘要、对称密钥 交换、安全协议的参数一致。但是IPSec协议并没有确保这些参数一致的手段。 同时&#xff0c;IP…

【C语法学习】11 - fprintf()函数

文章目录 1 函数原型2 参数3 返回值4 比较5 示例 1 函数原型 fprintf()&#xff1a;将格式化输出发送至指定流stream&#xff0c;函数原型如下&#xff1a; int fprintf(FILE *stream, const char *format, ...)2 参数 fprintf()函数参数包括三部分&#xff1a; 参数stream…

Json工具类

工具类 package com.wego.controller;import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.goog…

C++ Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。

一、问题描述&#xff1a; Package继承层次&#xff0c;采用继承实现快递包裹的分类计价&#xff08;分为空运2日达、陆运3日达&#xff09;。自定义一个或多个快递公司&#xff0c;自定义计价方法&#xff0c;设计合适、合理的界面文本提示&#xff0c;以广东省内某市为起点&…

『 MySQL数据库 』之数据库基础

文章目录 mysql的登陆选项什么是数据库mysql与mysqld的区别mysql与数据库为什么存储数据时不用文件而用数据库? 在Linux中如何显式观察数据库?在Linux中如何使用mysql建立一个数据库,建立一张表结构,插入一些数据;服务器与数据库、表之间的关系SQL分类 mysql的登陆选项 mysq…

httpclient工具类(支持泛型转换)

1、网上搜到的httpclient工具类的问题&#xff1a; 1.1、如下图我们都能够发现这种封装的问题&#xff1a; 代码繁杂、充斥了很多重复性代码返回值单一&#xff0c;无法拿到对应的Java Bean对象及List对象集合实际场景中会对接大量第三方的OPEN API&#xff0c;下述方法的扩展…

最亮那颗星的中年危机 —— 程序员的职场困境与破局

如果说最近的这十年国内市场什么工作是最受瞩目的&#xff0c;那么程序员绝对算得上是夜空中最闪亮的那颗星。 伴随科技的迅猛发展&#xff0c;计算机走进千家万户&#xff0c;智能终端深深融入每个人的生活&#xff0c;程序员这一职业群体也逐渐成为了现代社会中不可或缺的一…

分享一个抖音视频解析神器~

怎么样下载抖音视频&#xff1f;相信很多人都有过这样的困惑。作为一个资深短视频剪辑工作者&#xff0c;常常需要用到各种视频素材&#xff0c;其中不乏需要从抖音上下载的&#xff0c;因此我也尝试过许多下载工具&#xff0c;但是效果都不大满意&#xff0c;直到有一次朋友给…