TypeScript基础语法

news2024/11/19 0:43:31

👨 作者简介:大家好,我是Taro,前端领域创作者
✒️ 个人主页:唐璜Taro
🚀 支持我:点赞👍+📝 评论 + ⭐️收藏


文章目录

  • 前言
  • 一、TS是什么?
  • 二、使用步骤
    • 1.安装TS
    • 2.编译
  • 三、数据类型变化
  • 四、TS核心
      • 1. 类型注解
      • 2. 原始类型
      • 3. 数组类型
      • 4. 联合类型
      • 5. 类型别名
      • 5. 函数类型
      • 6. void类型
      • 7. 可选参数
      • 8. 类型推断
      • 8. 对象类型
      • 9. any类型
      • 10. 类型断言
      • 11. interface 接口
      • 12. type 交叉类型
      • 13. interface VS type
      • 14. 泛型
  • 总结


前言

本博客将深入介绍TypeScript语法,探讨其在现代Web应用程序开发中的重要性和应用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、TS是什么?

TS 是一种带有 类型语法 的 JavaScript 语言,在任何使用 JavaScript 的开发场景中都可以使用。

二、使用步骤

在这里插入图片描述

vue3源码使用TS重写,React与TS完美配合,Angular默认支持TS

1.安装TS

代码如下(示例):

npm i -g typescript

检查是否安装成功

tsc -v

2.编译

  • 新建 hello.ts 文件
  • 当前目录打开命令行,执行 tsc hello.ts 命令,同级生成hello.js 文件
  • 执行 node hello.js 查看执行结果

后期可借助 webpack ,vite 实现自动编译


三、数据类型变化

JS 已有类型:
基本数据类型:string , number , null , undefined , boolean
引用数据类型:Array , Object , Function , Symbol
TS 新增类型:
自定义数据类型(类型别名)、接口、元组、字面量类型、void、any、泛型、枚举

四、TS核心

1. 类型注解

let age:number = 18

这里的 :number 就是类型注解,它为变量提供了类型约束

2. 原始类型

原始类型使用简单,完全按照 JS 的类型书写即可

let age:number = 18;
let name:string = "Taro";
let isLoading:boolean = false;
let nullValue = null;
let undefinedValue = undefined;

3. 数组类型

数组类型有两种写法

  • 写法1
let arr:number[] = [1,2,3,4,]
  • 写法2
let arr:Array<string> = ['a','b','c']

如果数组中要存储多种数据呢?既 number 又存在 string 类型

4. 联合类型


let arr:(number|string)[] = [1,'a',2,'b',3,'c']

类型与类型之间使用 | 连接,代表类型是它们其中的一种,这种类型叫 联合类型

5. 类型别名

当同一类型(复杂)被多次使用时,可以通过类型别名,进行简化(类型别遵循大驼峰命名规范)

type CustomArr = (number | string)[]

let arr:CustomArr = [1,'a',2,'b',3,'c']

let arr2:CustomArr = [1,'a',2,'b',3,'c']

5. 函数类型

给函数指定类型,其实就是给 参数返回值 指定类型

  • 两种写法
    在函数基础上 分别指定 参数和返回类型
    使用类型别名 同时指定 参数和返回类型
// 函数声明

function add(num1:number,num2:number):number{
  return num1 + num2
}

// 箭头函数

const add = (num1:number,num2:number):number => {
  return num1 + num2
}

同时指定

type AddFn = (num1:number , num2:number) => number;

const add:AddFn = (num1,num2) => {
  return num1 + num2
}

6. void类型

如果函数没有返回值,且没有返回类型时,默认是 void

const say = ():void =>{
  console.log('Hello')
}

7. 可选参数

使用 ? 将参数标记为可选,此时函数的参数,可传可不传;【但是必传参数必须在可选参数前面】

function fn(num1:number, num2?: number) {
  console.log(num1)
  console.log(num2)
}

fn(10)

fn(10,20)

8. 类型推断

在 TS 中存在类型推断机制,在没有指定类型的情况下,TS也会给变量提供类型

let age = 18

function add(num1:number,num2:number){
  return num1 + num2
}

8. 对象类型

js中定义对象类型是这样的

let person = {
  name:'jack',
  sayHi(){}
}

TS中是这样的

// 有属性和方法,一行书写多个属性 ; 分隔
let person: { name: string; sayHi(): void } = {
  name: 'jack',
  sayHi() {},
};

9. any类型

any类型的作用是逃避 TS 的类型检查

let obj:any = {age:18}

当变量的类型指定为any时,不会有任何错误,也不会有任何代码提示,TS会忽略类型检查

10. 类型断言

当我们比 TS 更加明确一个值的类型,此时,可以使用类型断言来指定更具体的类型

// 这个类型太宽泛,没包含 a 元素特有的属性或方法,如 href
const aLink = document.getElementById('Link')

但是我们明确知道获取的是一个 A 元素,可以通过 类型断言 给它指定一个更具体的类型。

const aLink = document.getElementById('link') as HTMLAnchorElement

11. interface 接口

interface Person {
  name:string;
  age:number;
  sayHi:()=> void
}
  • 继承

两个接口相同的属性可以抽离出来,通过 extends 实现继承复用

interface Point2D {
  x: number;
  y: number;
}

// 继承 Point2D

interface Point3D extends Point2D {
  z: number;
}

// 继承后 Point3D 的结构:{ x: number; y: number; z: number }
let person:Person = {
  name:'jack',
  age:19,
  sayHi(){}
}

12. type 交叉类型

// 使用 type 来定义 Point2D 和 Point3D
type Point2D = {
  x: number;
  y: number;
};

// 使用 交叉类型 来实现接口继承的功能:

type Point3D = Point2D & {
  z: number;
};

// 使用 交叉类型 后,Point3D === { x: number; y: number; z: number }

let o: Point3D = {
  x: 1,
  y: 2,
  z: 3,
};

13. interface VS type

  • type 不支持重复定义
type Person = {
  name: string;
};
// 标识符“Person”重复  Error
type Person = {
  age: number;
};

  • interface 重复定义会进行合并
interface Person {
  name: string;
}
interface Person {
  age: number;
}
// 类型会合并,注意:属性类型和方法类型不能重复定义
const p: Person = {
  name: 'jack',
  age: 18,
};

14. 泛型

泛型是一种创建可复用代码组件的工具。这种组件不只能被一种类型使用,而是能被多种类型复用。类似于参数的作用

  • 泛型别名
type User = {
  name: string;
  age: number;
}

type Data<T> = {
  msg: string;
  code: number;
  data: T
}

// 使用类型
type UserData = Data<User>
  • 泛型接口
// 对象,获取单个ID函数,获取所有ID函数,ID的类型肯定是一致的,但是可能是数字可能是字符串
interface IdFn<T> {
  id: () => T;
  ids: () => T[];
}

const idObj: IdFn<number> = {
  id() { return 1 },
  ids() { return [1, 2] },
};

  • 泛型函数
// 函数的参数是什么类型,返回值就是什么类型
function getId<T>(id: T): T {
  return id
}

let id1 = getId<number>(1)
let id2 = getId('2')

// TS会进行类型推断,参数的类型作为泛型的类型 getId<string>('2')


总结

例如:以上就是今天要讲的内容,TypeScript语法是现代Web应用程序开发中不可或缺的一部分,通过静态类型检查和其他优秀的特性,可以提高代码质量和开发效率。

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

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

相关文章

力扣刷题 day41:10-11

1.乘积最大子数组 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 方法一&…

图像特征算法---ORB算法的python实现

一、ORB算法 1.算法简介 ORB 是 Oriented Fast and Rotated Brief 的简称&#xff0c;可以用来对图像中的关键点快速创建特征向量&#xff0c;这些特征向量可以用来识别图像中的对象。 其中&#xff0c;Fast 和 Brief 分别是特征检测算法和向量创建算法。ORB 首先会从图像中…

Nginx常用操作命令

文章目录 前言Nginx常用操作指令查看Nginx版本号启动Nginx && 关闭Nginx重新加载Nginx 前言 我们在使用Nginx操作命令之前&#xff0c;我们必须要进入到Nginx的目录里面才可以。 指令1&#xff1a;   cd /usr/local/nginx/   指令2&#xff1a;    cd sbin 也可…

计算机毕业设计 it职业生涯规划系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

MySQL三大日志undolog、redolog、binlog

在MySQL中&#xff0c;很多的功能也都需要基于日志实现&#xff0c;比如事务回滚、数据持久化、数据恢复、数据迁移、MVCC机制。其中undolog、redolog都是InnoDB引擎中的日志&#xff0c;而且都是在Buffer Pool中&#xff0c;而binlog在Server层中&#xff0c;位于每条线程中。…

如何在小程序首页设置标题栏文字

小程序的首页标题栏是用户进入小程序时首先看到的部分&#xff0c;因此设置一个适合文字对于树立品牌非常有作用。以下是一些简单的步骤&#xff0c;教你如何在小程序的首页设置标题栏文字&#xff08;如下图&#xff0c;白色的“商城”文字&#xff09;。 1. 在小程序管理员后…

电大搜题——学习的好机会

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 近年来&#xff0c;随着广播电视大学教育的普及&#xff0c;重庆开放大学以其卓越的教学品质和领先的教育理念&#xff0c;在继续教育领域崭露头角。作为这一教育品牌下的杰出成果&#xff0c;电大搜题微信…

旧苹果手机数据如何导入新手机里面?

旧iphone数据怎么导入新iphone&#xff1f;一般需要先备份旧iphone&#xff0c;然后再将备份恢复到新iphone。如果满足一定条件&#xff0c;也可以通过设备传输的方式。旧iphone数据导入新iphone要多久&#xff1f;这取决于导入的数据量以及使用的工具。本文会给大家详细讲解一…

【JavaEE初阶】 synchronized关键字详解

文章目录 &#x1f334;synchronized 的特性&#x1f6a9;互斥&#x1f6a9;可重入 &#x1f340;synchronized 的使用&#x1f6a9;直接修饰普通方法&#x1f6a9;修饰静态方法&#x1f6a9; 修饰代码块&#x1f9ed;synchronized 的使用总结&#xff1a; &#x1f38d;Java 标…

TCP/IP(十一)TCP的连接管理(八)socket网络编程

一 socket网络编程 socket 基本操作函数 bind、listen、connect、accept、recv、send、select、close 说明: 本文需要C语言、syscall系统调用、OS 操作系统支持,如果不了解可以暂时跳过备注&#xff1a; 知道对应库函数的更底层机制思考&#xff1a; socket函数与FIN、ACK等…

Malformed \uxxxx encoding.问题解决方案

问题背景 Maven项目构建时报错如下&#xff0c; [ERROR] Malformed \uxxxx encoding. [ERROR] java.lang.IllegalArgumentException: Malformed \uxxxx encoding. [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re…

测试岗最好用的——十大软件测试工具

前言 目前由于软件测试工作在软件的生产过程中越来越重要&#xff0c;很多软件测试工具应运而生&#xff0c;这里介绍一下目前最流行的一些软件测试工具&#xff0c;一个十个&#xff0c;介绍如下&#xff1a; 一、企业级自动化测试工具WinRunner 这款软件是Mercury Interact…

[NPUCTF2020]ezinclude 文件包含两大 getshell方式

PHP LFI 利用临时文件 Getshell 姿势 | 码农家园 说一下我的思路吧 robots没有 扫描发现存在 dir.php 然后404.html 报错 apache 2.18 ubuntu 这个又正好存在漏洞 所以前面全去看这个了 结果根本不是这样做。。。 正确的思路是这样 发现变量 认为是 name和 pass传递参数…

Python 机器学习入门之牛顿法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 梯度下降法 系列文章目录前言一、牛顿法1.牛顿法简介2.基本原理 总结 前言 上一篇文章里面说到了梯度下降法&#xff0c;它是使用泰勒近似定…

第18篇ESP32platformio-arduino框架-ili9488-3.5lcd显示时间天气

第18篇ESP32platformio-arduino框架-ili9488-lcd显示时间天气 第18篇esp32ili9488lcd显示时间天气 连接方法&#xff1a; 修改WIFI&#xff1a; 关键代码 void setup() {Serial.begin(115200);WiFi.mode(WIFI_STA);WiFi.begin(ssid,password);Serial.print("\r\nConnect…

codesys【软PLC】

软plc一般安装在工控机里。或者笔记本等小型电脑内。 电视盒子需要&#xff1a;刷个armbain 软件下载地址&#xff1a; CODESYS商城-商品列表 A&#xff1a;是实时系统 B&#xff1a;非实时 C&#xff1a;这个不能单独运行&#xff0c;需要在B的基础上。开启了多核线程…

国际教材概念基础

各种区别 缩写 A-LEVEL&#xff08;大学预科&#xff09;&#xff1a;General Certificate of Education Advanced Level AP&#xff1a;Advanced Placement&#xff08;美国地区&#xff1a;美高AP&#xff09; GCSE&#xff1a;General Certificate of Secondary Educati…

下载调试器 JTAG和SWD

下载调试器 JTAG和SWD 作为嵌入式工程师&#xff0c;下载调试器 JTAG和SWD是经常使用的&#xff0c;但你真正了解其SWD 和 JTAG接口的含义和区别吗&#xff1f; 一、什么是下载调试器&#xff1f; 下载调试器是将PC&#xff08;例如通过USB协议&#xff09;发送的命令转换为…

数组的reduce和reduceRight方法

1.reduce方法可用接收两个参数&#xff1a; 第一个参数&#xff1a;为一个回调函数&#xff0c;此回调函数又可以有四个参数 第1个参数&#xff1a;为上一次回调函数return的结果&#xff0c;首次默认为第二个参数值&#xff0c;如果没有第二个参数值&#xff0c;则默认当前数…

[Mono Depth/3DOD]单目3D检测基础

1.数据增强 图像放缩和裁剪后&#xff0c;相机内参要做相应变化 import random def random_scale(image, calib, scale_range(0.8, 1.2)):scale random.uniform(*scale_range)width, height image.sizeimage image.resize((int(width * scale), int(height * scale)))cali…