关于 ts 这一篇文章就够了

news2024/11/18 10:24:37

你好

文章目录

  • 一、js 和 ts
  • 二、TypeScript的特点
  • 三、了解 ts , 爱上 ts 🤣


一、js 和 ts


        随着近几年前端领域的快速发展,JavaScript 迅速被普及和受广大开发者的喜爱,借助于 JavaScript 本身的强大,也让使用JavaScript开发的人员越来越多,优秀的JavaScript没有缺点吗?其实上由于各种历史因素,JavaScript语言本身存在很多的缺点

缺点:

  1. 比如 ES5 以及之前的使用的 var 关键字关于作用域的问题 ;
  2. 比如最初 JavaScript 设计的数组类型并不是连续的内存空间
  3. 比如直到今天 JavaScript 也没有加入类型检测这一机制;

但是JavaScript正在慢慢变好:

  1. 不可否认的是,JavaScript正在慢慢变得越来越好,无论是从底层设计还是应用层面。
  2. ES6、7、8等的推出,每次都会让这门语言更加现代、更加安全、更加方便。
  3. 但是知道今天,JavaScript在类型检测上依然是毫无进展(为什么类型检测如此重要,我后面会聊到)。

编程开发中我们有一个共识 : 错误出现的越早越好

  1. 能在写代码的时候发现错误,就不要在代码编译时再发现 ( IDE 的优势就是在代码编写过程中帮助我们发现错误 )
  2. 能在代码编译期间发现错误,就不要在代码运行期间再发现 ( 类型检测就可以很好的帮助我们做到这一点 )
  3. 能在开发阶段发现错误,就不要在测试期间发现错误,
  4. 能在测试期间发现错误,就不要在上线后发现错误,
  5. 现在我们想探究的就是如何在代码编译期间发现代码的错误 : JavaScript 可以做到吗?不可以

二、TypeScript的特点

  1. 始于JavaScript,归于JavaScript

    • TypeScript 从今天数以百万计的 JavaScript 开发者所熟悉的语法和语义开始。使用现有的 JavaScript 代码,包括流行的 JavaScript 库并从 JavaScript 代码中调用 TypeScript 代码;
    • TypeScript 可以编译出纯净、简洁的 JavaScript 代码,并且可以运行在任何浏览器上、Node.js 环境中和任何支持 ECMAScript3 ( 或更高版本 )的 JavaScript 引|擎中 ;
  2. TypeScript是一个强大的工具,用于构建大型项目

    • 类型允许 JavaScript 开发者在开发 JavaScript 应用程序时,使用高效的开发工具和常用操作,比如静态检查和代码重构
    • 类型是可选的,类型推断让一些类型的注释使你的代码的静态验证有很大的不同。类型让你定义软件组件之间的接口和洞察现有JavaScript库的行为;

TypeScript :加强版的 JavaScript

  1. JavaScript 所拥有的特性,TypeScript 全部都是 支持 的,并且它紧随ECMAScript的标准,所以ES6、ES7、ES8等新语法标准,它都是支持的
  2. 在语言层面上,不仅仅 增加了类型约束,而且包括一些语法的扩展,比如枚举类型(Enum )、元组类型( Tuple)等
  3. TypeScript 在实现新特性的同时,总是保持和 ES 标准的同步甚至是领先;
  4. TypeScript 最终会被编译成 JavaScript 代码,所以你并不需要担心它的兼容性问题,在编译时也不需要借助于Babel这样的工具
  5. 所以,我们可以把TypeScript理解成更加强大的JavaScript,不仅让JavaScript更加安全,而且给它带来了诸多好用的好用特性,

在这里插入图片描述

三、了解 ts , 爱上 ts 🤣


类型检测: 这里会对每个变量进行类型检测,规定是什么类型,再赋值不符合就会报错

// 指定他的数据类型
let num:number = 123
let str:string = 'hahaha'

// 默认情况下。如果可以推导出对应的标识符类型,就不加
let num = 123
let str = 'hahah'

  1. number 数字类型 ( 不区分整形和浮点型 )

  2. boolean 布尔类型

  3. string 字符类型 ( 支持模板字符串 )

  4. array 数组类型

//数组开发中,最好存放的数据类型是固定的
const names : Array<string> = []  //不太推荐,因为可能会和 jsx 语法有冲突
const names : string[] = []
  1. object 对象类型 ( 能推导就推导 )
  2. null 和 undifined
const n:null = null
const n:undefined = unfefined
  1. symbol

  2. any 无法确定类型时使用,最好不要使用,不然意义在哪里?

  3. unknown 只能赋值给 any 类型和 unkown 类型 ; any 类型可以赋值给任意类型

  4. T 泛型 不预先指定具体的类型,而是在使用的时候在指定类型限制的一种特性

  5. never 会提醒开发者类型检查


function handleMessage( message:string | number){
	switch (typeof message){
		case 'string':
			console.log('string 的处理')
			break
		case 'nubmer':
			console.log('nubmer的处理')
			break
		default:
			const check:never = message	   //当没有对message 类型检查完时会提醒开发者
	}	
}
  1. tuple 元组类型 多种类型的组合
const info : [string,number] = ['abc',123] //指定每个元素类型

// Array 数组类型是指定所有的数据类型
// any 有点危险,并没有指定数据类型
// tuple 可以指定数据类型
// T 泛型是在使用是指定数据类型

函数的返回值类型:

  1. 函数的返回值和类型

// 通常情况下,在定义一个函数时,都会给参数加上类型注解
function sum(num1:number,num2:number):void ( string ){
 //当返回值为空时可以设置void
 //可以指定返回值类型 
}


ps:
// 上下文的函数,一般不加类型注解,会根据上下文环境推导出来 (箭头函数...)
  1. 指定返回值个数
function sum(num1:number,num2?:number):void ( string ){
 //表示第二个参数可选择传
}

类型别名:

 type unionType= string | number | boolean
 
 //此时 id 的类型就是 string 或者 number 或者 boolean
 function print(id:unionType){
 }


  • 如果可以推导出对应的标识符的类型时,可以不加
  • z?:number 可选 当一个参数是可选类型的时候,,他其实本质上表示的是这个参数是 类型|undefined 的联合类型
  • 类型别名

是真的烦,哎,累死了,
打开飞机喀什地方史蒂夫卡省的放射科大夫了爱对方律师阿道夫啦啦啦的身份卡四点零分拉是否阿斯弗的反馈

使用联合类型值时,需要特别小心 narrow

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

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

相关文章

java八股文面试[JVM]——JVM内存结构2

知识来源&#xff1a; 【2023年面试】JVM内存模型如何分配的_哔哩哔哩_bilibili

PRACK消息

概述 PRACK消息是sip协议的扩展&#xff0c;在RFC3262中定义&#xff0c;标准的名称是sip协议中的可靠临时响应。 本文简单介绍标准中对PRACK消息流程的描述&#xff0c;以及fs配置PRACK的方式。 环境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitc…

开放式耳机百元旗舰标杆,性能小钢炮南卡OE CC开放式耳机上线!

近日&#xff0c;南卡再次以领先的姿态推出了百元级性能小钢炮&#xff0c;全新NANK南卡OE-CC耳机。这款耳机不仅延续了南卡一贯的创新精神&#xff0c;更是为用户带来了卓越的音质和性能体验。南卡OE-CC的上线&#xff0c;再次彰显了南卡作为行业先驱者的地位&#xff0c;为用…

中科驭数受邀在招商银行金融科技论坛作异构计算主题分享 解码金融科技先进算力构建之路

8月25日&#xff0c;2023招银浦江金融科技论坛正式召开。中科驭数高级副总裁张宇受邀在资管科技分论坛发表《金融行业先进异构算力底座构建之路》的主题演讲&#xff0c;与参会嘉宾分享了当前计算系统的发展趋势以及如何通过异构算力构建IT技术底座来推动金融科技的创新。 ▲ 中…

行政如何借助ChatGPT提高效率

文章目录 ChatGPT的优势与局限行政人员的核心价值行政人员应对策略借助ChatGPT提高效率结论 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &a…

WPF基础入门-Class4-WPF绑定

WPF基础入门 Class4&#xff1a;WPF绑定 1、cs文件中设置需要绑定的数据&#xff1a; public partial class Class_4 : Window{public Class_4(){InitializeComponent();List<Color> test new List<Color>();test.Add(new Color() { Code "Yellow",…

Mybatis-Plus 代码自动生成器 整合springboot

Pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

修改Jupyter Notebook默认打开路径

这里我是重新下载的anaconda&#xff0c;打开Jupyter之后是默认在C盘的一个路径的&#xff0c;现在我们就来修改一下它的一个默认打开路径&#xff0c;这样在我们后续学习过程中&#xff0c;可以将ipynb后缀的文件放在这个目录下就能查看了。 1、先打开Anaconda Prompt&#x…

【已解决】Windows11给IPad或IPhone拷贝文件

问题&#xff1a; 想要把电脑的PDF学习的文件拷贝到IPad上 解决办法&#xff1a; 电脑以win11为例&#xff0c;语言我调成英文用了&#xff0c;大家可以自行翻译对应。 创建账户 1、新建一个账户用于共享专用。点击settings-Accounts-Others Users-Add account&#xff0c…

【中危】Apache XML Graphics Batik<1.17 存在SSRF漏洞 (CVE-2022-44729)

zhi.oscs1024.com​​​​​ 漏洞类型SSRF发现时间2023-08-23漏洞等级中危MPS编号MPS-2022-63578CVE编号CVE-2022-44729漏洞影响广度极小 漏洞危害 OSCS 描述Apache XML Graphics Batik 是一个开源的、用于处理可缩放矢量图形(SVG)格式图像的工具库。 受影响版本中&#xff0…

Midjourney 完整版教程(从账号注册到设计应用)

目录 一、Midjourney 介绍 二、Midjourney 的AI出图示例 三、手把手教你上手Midjourney 1、账号&初始化 1.1 账号注册登录 1.2 账号付费 1.3 账号初始化 2、Midjourney的基础设置 3、Midjourney 出图步骤。 (一)直接描述出图 (二)垫图生图。 4、Midjourney的…

类加载器的分类

1、几种类加载器的使用体会 JVM支持两种类型的类加载器&#xff0c;分别为引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;和自定义类加载器&#xff08;User-Defined ClassLoader&#xff09;。从概念上来讲&#xff0c;自定义类加载器一般指的是程序中由开发人员…

【java】【项目实战】[外卖二]后台登录与退出功能实现

目录 一 、登录功能开发 1.1 需求分析 1.1.1 查看原型 1.1.2 查看效果图 1.1.3 查看登录请求信息&#xff08;有接口文档最佳啊&#xff09; 1.1.4 数据模型 &#xff08;employee表&#xff09; 1.2 代码开发 1.2.1 创建实体类Employee与employee库表进行映射 1.2.2 创…

Mac操作系统上设置和配置PPPoE连接

嗨&#xff0c;在使用Mac的小伙伴么&#xff01;你是否在Mac操作系统上尝试设置和配置PPPoE连接&#xff0c;却不知道怎么设置&#xff1f;别担心&#xff0c;今天我将为你一步步教你如何在Mac上进行设置和配置。无论你是新手还是有经验的用户&#xff0c;本文都将帮助你轻松完…

Montreal Forced Aligner (MFA)安装教程失败原因集合

写在前面&#xff1a;本文章只考虑2.x版本以后的安装时遇到的问题 推荐大家看官方的安装教程&#xff0c;里面设计不同系统&#xff0c;不同场景的安装方式。 官网安装教程地址&#xff1a;https://montreal-forced-aligner.readthedocs.io/en/latest/installation.html 在安装…

【福利】Google Cloud Next ’23 精彩待发,Cloud Ace 作为联合赞助商提前发福利~

【Cloud Ace 是 Google Cloud 全球战略合作伙伴&#xff0c;在亚太地区、欧洲、南北美洲和非洲拥有二十多个办公室。Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位&#xff0c;并连续多次获得 Google Cloud 各类奖项。作为谷歌云托管服务商&#xff0c;我们提供谷…

centos7设置java后端项目开机自启【脚本、开机自启】

1.切换目录 cd /etc/init.d/2.编辑脚本 vim wbs-service-start.sh编辑内容 #!/bin/bash # chkconfig: 2345 80 90 # description: auto_runnohup java -jar /usr/java/wbs-service.jar > /dev/null 2>&1 & echo $! > /var/run/wbs-service.pid3.添加进入系…

小匠物联联合亚马逊云助力企业数智化出海

如何让家电企业出海产品数智化之路走上康庄大道&#xff1f;8月25日,亚马逊云科技[创新成长企业专列]这趟上云快车将开往宁波站&#xff0c;助力宁波的制造、软件等企业扬帆起航&#xff01;现场举办“亚马逊云科技助力企业出海数智沙龙”&#xff0c;小匠物联受邀出席。 会议现…

实验室信息化管理系统的优势及发展趋势

随着现代化实验室的快速发展&#xff0c;实验室数据的管理和处理已经不再是单纯的人工填写、计算和报表编制&#xff0c;实验室管理工作的复杂性和艰巨性与日俱增&#xff0c;传统实验室的管理模式已经无法满足实验室管理的需求。为了解决这些问题&#xff0c;LIMS&#xff08;…

P14-CVPR2022-1.0-RepLKNet31

论文地址:https://arxiv.org/abs/2203.06717 代码地址:GitHub - MegEngine/RepLKNet: Official MegEngine implementation of RepLKNet ‘ 目录 Abstract 一.Introduction 二.Related Work 2.1Model with Large Kernels 2.2Model Scaling Techniques 2.3Structural Re-…