TypeScript 基础类型(一)

news2024/9/23 17:39:20

简介

它是 JavaScript 的超集,具有静态类型检查和面向对象编程的特性。TypeScript 的出现,为开发者提供了一种更加严谨和高效的开发方式。

主要特点:

  1. 、静态类型检查。

通过静态类型检查,开发者可以在编译时发现错误,而不是在运行时。这有助于减少调试时间,提高代码质量。TypeScript 支持多种类型注解,包括基本类型(如 number、string、boolean 等)、数组、元组、枚举、接口、类等。

  1. 面向对象编程

支持类、接口、继承、多态等面向对象编程的核心概念。开发者可以使用 TypeScript 编写更具结构性和模块化的代码,提高代码的复用性和可维护性。此外,TypeScript 还支持装饰器(Decorators),这是一种用于类和方法的元数据注解,可以用于实现依赖注入、日志记录、权限控制等功能。

基础类型

首先需要生成一个ts的配置文件

Tsc --init

使用 BigInt 等ES6新增的,需要在配置文件lib中添加配置

  "lib": [
      "ES2022",
      "dom"
    ],       
  • 布尔、数字、字符串

类型小写用于基本类型,大写的类型都是包装类(实例对象等)

let name:string = "smz"
let age:number = 18
let handsome:boolean = true
  • 数组
let arr1: number[] = [1, 2, 3]
let arr2: Array<number> = [1, 2, 3]
let arr3: (number | string)[]= [1, 2, 3, '4']
let arr4: Array<number | string> = [1, 2, 3, '4']
  • 元组
    规定长度和存储的类型

添加只能添加元组中存在的类型,但是不能调用,因为不确定是否存在这个值

let tuple1: [number, string, boolean] = [1, '2', true]
tuple1.push(1)
tuple1.push('3')
tuple1.push(false)
// tuple1[3] // 不能使用后添加的值
  • 枚举

自带类型的对象,自动增长,数字类型的枚举 可以反举,可以直接赋值,后面的会根据上一个自动推断自身值

知道名称,不知道值: const enum<名称> {}
使用:<枚举名称>.<名称>

知道值,不知道名称(反举):enum <名称> {}
使用: <枚举名称>[<值>]

enum UserType {
    Admin,
    User,
    Guest
}

console.log(UserType.Admin)

enum UserType2 {
    Admin = 0,
    User= 1,
    Guest = 2
}
let userItem:string = UserType2[1]
console.log(userItem)
  • any
    任意值

在不清楚是什么类型的时候用 any

let notSure: any = 4;
notSure.toFixed();
  • Object
    所有

与any类似,但是 Object 类型的变量不允许调用任何方法,有也并不能调用

let prettySure: Object = 4;
 prettySure.toFixed(); //  Property 'toFixed' does not exist on type 'Object'.
  • void
    空值

表示没有任何类型,当函数没有返回值时,使用void

function warnUser(): void {
    alert("This is my warning message");
}

  • Undefined 和 Null
    Undefined :不存在以后也不存在 Null:不存在以后可能存在
let u: undefined = undefined;
let n: null = null;
  • never
    永不存在类型

never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;可以用来做代码完整性检测

function error(message: string): never {
    throw new Error(message);
}
function infiniteLoop(): never {
    while (true) {
    }
}
// 类型保护
function valiData(val: string | number) {}
function getResult(srtgrOrNum: string | number | boolean){
    if (typeof srtgrOrNum ==='string') {
        return srtgrOrNum;
    }
    if (typeof srtgrOrNum === 'number') {
        return srtgrOrNum;
    }
    // if (typeof srtgrOrNum === 'boolean') {
    //     return srtgrOrNum;
    // }
    // 永远不能到达这一步,到这一步说明方法缺失逻辑
     valiData(srtgrOrNum) // Argument of type 'string | number | boolean' is not assignable to parameter of type 'never'.   Type 'string' is not assignable to type 'never'.
}
  • Symbol
    永远唯一
let symbol1:symbol = Symbol("1")
let symbol2:symbol = Symbol("1")
console.log(symbol1 === symbol2) // false
let symbol3:symbol = Symbol.for("1") // 根据key找
console.log(symbol1 === symbol3) // true
  • BigInt
    长整型
let b1:bigint = BigInt(Number.MAX_SAFE_INTEGER + 100000)
console.log(b1)

类型推断

- 基本

在有些没有明确指出类型的地方,类型推论会帮助提供类型

let a = 1
let y ='2'
let z = true

在这里插入图片描述

  • 最佳通用类型

需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型

let x = [0, 1, null];

在这里插入图片描述

  • 上下文类型

TypeScript类型推论也可能按照相反的方向进行。 这被叫做“按上下文归类”。按上下文归类会发生在表达式的类型与所处的位置相关时。

window.onmousedown = function(mouseEvent) {
    console.log(mouseEvent.button);
};

window.onmousedown = function(mouseEvent: any) {
    console.log(mouseEvent.button);
};

在这里插入图片描述

  • 联合类型

联合类型的变量只能访问公共方法,除非在使用方法前对变量已经赋值了。

let name: string | number ;
name.toFixed(); 

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/79c0bd86224c4ce7913fca2c963b9ce4.png

类型定义

使用 type 关键字定义自己的类型

type Person = '男' | '女' | '其它'
let person: Person = '男'

也可以通过对象属性和联合类型做互斥(可辨识联合类型)

type Person2 =
    {
        weal: true,
        waste: string
    }
    |
    {
        weal: false,
        waste: number
    }

let person2: Person2 = {
    weal: true,
    waste: '123'
}
let person3: Person2 = {    
    weal: false,
    waste: 123
}

断言

断言就是,让代码绕过TS检查

  • 非空断言

指定其不可能为空

let ele = document.getElementById('app')
// 方式1
ele!.style.color ='red'
// as 断言
(ele as HTMLDivElement).style.color ='red'
  • 双重断言

将某个值通常断言成 any 再断言成 其他类型,any类型可以赋值给任何类型

let str: string | number
let boo = (str! as any) as boolean

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

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

相关文章

大气热力学(8)——热力学图的应用之一(气象要素求解)

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记&#xff0c;现转化为电子版本以作存档。相较于手写笔记&#xff0c;电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 8.1 复习斜 T-lnP 图上的几种线8.1.1 等温线和等压线8.1.2 干绝热…

搬运5款我觉得超级好用的软件

​ 今天再来推荐5个超级好用的效率软件&#xff0c;无论是对你的学习还是办公都能有所帮助&#xff0c;每个都堪称神器中的神器&#xff0c;用完后觉得不好用你找我。 1.PDF阅读——Sumatra PDF ​ Sumatra PDF 是一款 PDF 阅读器&#xff0c;它的界面简洁&#xff0c;使用起…

乐尚代驾一项目概述

前言 2024年7月17日&#xff0c;最近终于在低效率的情况下把java及其生态的知识点背的差不多了&#xff0c;投了两个礼拜的简历&#xff0c;就一个面试&#xff0c;总结了几点原因。 市场环境不好 要知道&#xff0c;前两年找工作&#xff0c;都不需要投简历&#xff0c;把简历…

DevExpress WPF中文教程 - 为项目添加GridControl并将其绑定到数据

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

小程序-3(页面导航+页面事件+生命周期+WXS)

目录 1.页面导航 声明式导航 导航到tabBar页面 导航到非tabBar页面 后退导航 编程式导航 后退导航 导航传参 声明式导航传参 编程式导航传参 在onload中接收导航参数 2.页面事件 下拉刷新 停止下拉刷新的效果 ​编辑 上拉触底 配置上拉触底距离 上拉触底的节…

函数返回右值的一点学习研究

https://zhuanlan.zhihu.com/p/511371573?utm_mediumsocial&utm_oi939219201949429760 下面情况下不会调用&#xff1a; DPoint3d fun1() {return DPoint3d{1,2,3}; // 默认构造 }int main() {DPoint3d&& a fun1();a.y 20;int i 0;i; } 下面情况下&#xff0c…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(下:数据操作与查询)

文章目录 DML数据操作语言1、新增记录2、删除记录3、修改记录 DQL数据查询语言1、查询记录2、条件筛选3、排序4、函数5、分组条件6、嵌套7、模糊查询8、limit分页查询 集合操作union关键字和运算符in关键字any关键字some关键字all关键字 联合查询1、广义笛卡尔积2、等值连接3、…

【.NET全栈】ASP.NET开发Web应用——站点导航技术

文章目录 前言一、站点地图1、定义站点地图文件2、使用SiteMapPath控件3、SiteMap类4、URL地址映射 二、TreeView控件1、使用TreeView控件2、以编程的方式添加节点3、使用TreeView控件导航4、绑定到XML文件5、按需加载节点6、带复选框的TreeView控件 三、Menu控件1、使用Menu控…

【BUG】已解决:ModuleNotFoundError: No module named ‘cv2’

已解决&#xff1a;ModuleNotFoundError: No module named ‘cv2’ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开…

C语言中常见库函数(1)——字符函数和字符串函数

文章目录 前言1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strncmp的使用和模拟实现7.strncpy函数的使用8.strncat函数的使用9.strncmp函数的使用10.strstr的使用和模拟实现11.strtok函数的使用12.strerror函数的…

打破运维“冷门槛“|暴雨液冷数据中心方案再升级

如果将数据比喻为驱动世界运转的新引擎&#xff0c;那数据中心便是为引擎提供源源不断动力的泵站。但随着泵站功率的日益增强&#xff0c;热浪成了不可避免的副产品。如何将数据热能转化为科技动能&#xff0c;是人工智能可持续发展的重要前提。 液冷技术&#xff0c;不仅可实现…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

uniapp打包h5,白屏并报错Failed to load resource: net::ERR_FILE_NOT_FOUND

在manifest.json内找到web配置修改运行的基础路径

MySQL 进阶(三)【SQL 优化】

1、SQL 优化 1.1、插入数据优化 1.1.1、Insert 优化 1、批量插入 插入多条数据时&#xff0c;不建议使用单条的插入语句&#xff0c;而是下面的批量插入&#xff1a; INSERT INTO tb_name VALUES (),(),(),...; 批量插入建议一次批量 500~100 条&#xff0c;如果数据量比…

Web3时代的教育技术革新:智能合约在学习管理中的应用

随着区块链技术的发展和普及&#xff0c;Web3时代正在为教育技术带来前所未有的革新和机遇。智能合约作为区块链技术的核心应用之一&#xff0c;不仅在金融和供应链管理等领域展示了其巨大的潜力&#xff0c;也在教育领域中逐渐探索和应用。本文将探讨智能合约在学习管理中的具…

Linux中运用xsync实现免密集群分发

一、前言 今天搭建了三台虚拟机的集群&#xff0c;在集群中部分操作在三台虚拟机上的操作都一致&#xff0c;为了提高效率&#xff0c;就需要配置xsync实现集群分发。 二、设置免密登录 1.生成公钥和私钥 ssh-keygen -t rsa一直敲回车&#xff0c;会生成两个文件&#xff0c…

Yolov8网络结构学习

详解YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署 深入解析YOLOv8&#xff1a;网络结构与推理过程 YOLO? You Know! --YOLOV8详解 一&#xff1a;yolov8总体结构 1.Backbone:它采用了一系列卷积和 反卷积层只来提取特征&#xff0c;同时也使用了残差连接和…

酷炫末世意境背景404单页HTML源码

源码介绍 酷炫末世意境背景404单页HTML源码&#xff0c;背景充满着破坏一切的意境&#xff0c;彷佛末世的到来&#xff0c;可以做网站错误页或者丢失页面&#xff0c;将下面的代码放到空白的HTML里面&#xff0c;然后上传到服务器里面&#xff0c;设置好重定向即可 效果预览 …

滑动窗口题目

题目描述&#xff1a; 计算两个字符串str1和str2在给定的含有n个元素的字符串数组strs中出现的最短距离。 详细解释&#xff1a; 定义整数变量n&#xff0c;用于存储字符串数组strs的长度。定义一个vector<string>类型的变量strs&#xff0c;用于存储输入的字符串。定义…