当前位置: 首页 > news >正文

【TypeScript】基础:数据类型

文章目录

    • TypeScript
      • 一、简介
      • 二、类型声明
      • 三、数据类型
          • any
          • unknown
          • nerver
          • void
          • object
          • tuple
          • enum
          • Type
          • 一些特殊情况

TypeScript

是JavaScript的超集,代码量比JavaScript复杂、繁多;但是结构更清晰

一、简介

为什么需要TypeScript?

JavaScript的困扰

  1. 不清楚的数据类型
  2. 不会指明代码的逻辑漏洞
  3. 访问不存在的属性
  4. 低级的拼写错误

Typescript会进行静态类型检查:在代码运行前对代码进行检查标红;将代码错误前置

如何编译TypeScript?

要将.ts编译成.js文件;需要配置TypeScript的编译环境

  1. 全局安装TypeScript:npm i TypeScript -g

  2. 初始化:tsc --init

    生成一个编译控制文件tsconfig.json

  3. 监视ts文件:tsc --watch index.ts

    会生成一个对应的js文件,一有变化就会更新;并生成一个配置文件tsconfig.json

  4. 修改配置文件:取消注释 noEmitOnError:true

    只要ts文件语法正确的时候才会更新ts

二、类型声明

声明变量时,需要对其进行类型声明;使用:来进行类型声明

let a: string // a是字符串变量,只能赋值字符串(官方推荐小写)
let b: String // 字符串对应的包装对象
function sum(a: number, b: number): number {return a + b
} //sum函数的参数必须的number,返回值也必须是number

三、数据类型

any

任意类型,意味着放弃类型检查;即可以存任意类型的值,也可以赋值给任意类型的变量

unknown

未知类型,类型安全的any,但是不能将unknown数据类型赋给其他类型

若要将unknown赋值给其他类型,可以这么做:

let a: unknown
a = "hello"
let b: string
b = a as string
let str:unknown
str = "world"
str.toUppercase() //有警告
(str as string).toUppercase() //无警告
nerver

不是任何值;我们一般不用,不然声明的变量将无用。一般是TypeScript主动推断出来的,或者是特殊的函数(不需要任何返回值)

void

通常用于函数返回值的类型声明;这个类型是,函数返回值为空(undefined),且不依赖函数返回值进行任何操作。

function fn():undefined{ ... } 
let result1 = fn() // 编码者可以利用函数的返回值
function fn():void{ ... } 
let result2 = fn() // 编码者不可以利用函数的返回值
object

object(小写):非原始数据类型

Object(大写):可以调用到Object方法的类型;通俗讲,除了null和undefined都可以。

  1. 声明对象类型
  let person: { name: string, age?: number, [key: string]: any }//age?表示可选,// [key: string]: any 表示索引签名,任意数量的属性;key是any类型,value是string类型。
  1. 声明函数类型
  let sum: (a: number, b: number) => number //指明传入的参数类型number,返回类型也为numbersum = function (x, y) {return x + y}
  1. 声明数组类型
  let arr1:srtring[] //字符串数组let arr2:Array<string> //数字数组
tuple

元组类型 -> 特殊的数组类型。元素固定数量,可以是不同类型

!注意:元组不是关键字

let arr1 = [number,string] //两个元素,一个数字,一个字符串
let arr2 = [number,...[string]] //一个数字和任意个string
enum

枚举类型,定义一组命名常量;增强可读性,可维护性,程序员编写代码时不容易出错

  1. 数字枚举
  enum Direction{ Up, Down, Left, Right }function walk(data:Direction){ //使用例子if(data === Direction.Up){console.log("向【上】走");}else if(data === Direction.Down){console.log("向【下】走")}else if(data === Direction.Left){console.log("向【左】走")}else if(data === Direction.Right){console.log("向【右】走")}}
  1. 字符串枚举
  enum Direction{Up = "up",Down = "down",Left = "left",Right = "right"}
  1. 常量枚举

使用const关键字定义,在编译时内联,避免产生额外的代码

:那么何为内联?

在TypeScript编译时,将成员引用替换成实际值,不生成额外枚举对象,减少Javascript代码量,提高运行速度。

Type

为任意数据类型创建别名;一般开头用大写

  1. 创建别名

    type num = number // num是数字类型
    
  2. 联合类型(高级类型)

    type Status = number|string //Status是数字或字符串类型
    type Gender = "男"|"女" //Gender是字符"男"or"女"
    
  3. 交叉类型

    type Area = {height : number;width : number;speak():void;
    };
    
一些特殊情况

!当使用类型声明限制函数的返回值为空时,TypeScript并不会严格限制函数的返回值为空!

补充 数组方法map(),find()都是有返回值的操作;而forEach()是单纯遍历数组,没有返回值

type LogFunc = () => viod
const fn:LogFunc = () => {return 100 //允许返回非空值
}

为什么如此呢?就是为了兼容以下代码:

let src = [1, 2, 3]
const dst = [0]
src.forEach((e1) => dst.push(e1)) //forEach本身没有返回值,但是由于如果箭头函数只有一段代码可以不加{},如果严格限制返回值必须为空的话,这样写就会不合法,所以提前用限制函数为void的话,不是严格要求返回值必须是空

相关文章:

【TypeScript】基础:数据类型

文章目录 TypeScript一、简介二、类型声明三、数据类型anyunknownnervervoidobjecttupleenumType一些特殊情况 TypeScript 是JavaScript的超集&#xff0c;代码量比JavaScript复杂、繁多&#xff1b;但是结构更清晰 一、简介 为什么需要TypeScript&#xff1f; JavaScript的…...

Notepad++消除生成bak文件

设置(T) ⇒ 首选项... ⇒ 备份 ⇒ 勾选 "禁用" 勾选禁用 就不会再生成bak文件了 notepad怎么修改字符集编码格式为gbk 如图所示...

Android NDK

Android NDK环境 D:\Android SDK\ndk\25.2.9519653 使用clang而不用gcc D:\Android SDK\ndk\25.1.8937393\toolchains\llvm\prebuilt\windows-x86_64\bin\clang --version 查看是否安装成功clang ptrace 在 C 语言中&#xff0c;ptrace 已经被 Linux 内核实现&#xff0…...

内部知识库助力组织智力激发与信息共享实现业绩增长

内容概要 内部知识库是企业知识管理的核心组件&#xff0c;具有不可估量的重要性。通过构建有效的知识库&#xff0c;组织能够将孤立的知识和信息整合成为一个系统性的体&#xff0c;极大提高员工访问和利用这些信息的能力。这不仅简化了决策过程&#xff0c;还通过减少重复劳…...

通过F12收集的信息

按 F12 键打开浏览器的开发者工具&#xff08;DevTools&#xff09;可以获取部分操作系统和中间件信息&#xff0c;但能力有限。以下是具体说明&#xff1a; 一、通过 F12 收集的信息 1. 客户端操作系统信息 - Console 控制台 通过 JavaScript 直接获取客户端操作系统信息&am…...

用Python替代OpenMV IDE显示openmv USB 图像

原理是利用openmv的usb模仿串口&#xff0c;然后用Python代码打开串口接收 能替代openmv ide 跑48帧图像 Python端需要的依赖&#xff1a; 需要的是&#xff1a; from ultralytics import YOLO import cv2 import numpy as np from serial import Serial import time from co…...

c语言:编译和链接(详解)

前言 要将编译和链接&#xff0c;就不得不提及编译器是如何运作的&#xff0c;虽然这部分知识是针对于要创造编译器和创作语言的人所需要清楚的&#xff0c;但作为c语言的学习者也需要了解一下&#xff0c;修炼内功&#xff0c;尤其是对于想学习c的人而言。 编译器的运作过程…...

数据结构【单链表操作大全详解】【c语言版】(只有输入输出为了方便用的c++)

单链表操作的C/C实现详解 在数据结构中&#xff0c;单链表是一种非常基础且重要的数据结构。它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。今天我们就来深入探讨用C/C实现的单链表及其各种操作。 一、单链表的定义 const int N 1e5; //单链表 t…...

leetcode27.删除有序数组中的重复项

目录 问题描述判题标准示例提示 具体思路思路一思路二 代码实现 问题描述 给你一个非严格递增排列的数组nums&#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次&#xff0c;返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回nums中唯一元…...

[c语言日寄]越界访问:意外的死循环

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

【c++11】包装器

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 包装器&#xff08;Wrapper&#xff09; 是一个常见的编程设计模式&#xff0c;通常用于封装或“包装”某个现有的对象、函数、数据结构或者操作&#xff0c;以提供额外的功能或简化接口。…...

信息学奥赛一本通 1422:【例题1】活动安排

【题目链接】 ybt 1422&#xff1a;【例题1】活动安排 【题目考点】 1. 贪心 【解题思路】 该题属于区间选点问题&#xff0c;ybt 1324&#xff1a;【例6.6】整数区间 是给定一些区间&#xff0c;选择一些点使得每个区间范围内至少有1个点。 本题为&#xff1a;给定一些区…...

数据库、数据仓库、数据湖有什么不同

数据库、数据仓库和数据湖是三种不同的数据存储和管理技术&#xff0c;它们在用途、设计目标、数据处理方式以及适用场景上存在显著差异。以下将从多个角度详细说明它们之间的区别&#xff1a; 1. 数据结构与存储方式 数据库&#xff1a; 数据库主要用于存储结构化的数据&…...

llama.cpp LLM_CHAT_TEMPLATE_DEEPSEEK_3

llama.cpp LLM_CHAT_TEMPLATE_DEEPSEEK_3 1. LLAMA_VOCAB_PRE_TYPE_DEEPSEEK3_LLM2. static const std::map<std::string, llm_chat_template> LLM_CHAT_TEMPLATES3. LLM_CHAT_TEMPLATE_DEEPSEEK_3References 不宜吹捧中国大语言模型的同时&#xff0c;又去贬低美国大语言…...

深度学习的应用场景及常用技术

深度学习作为机器学习的一个重要分支&#xff0c;在众多领域都有广泛的应用&#xff0c;以下是一些主要的应用场景及常用技术。 1.应用场景 1. 计算机视觉 图像分类 描述&#xff1a;对图像中的内容进行分类&#xff0c;识别出图像中物体所属的类别。例如&#xff0c;在安防领…...

小程序项目-购物-首页与准备

前言 这一节讲一个购物项目 1. 项目介绍与项目文档 我们这里可以打开一个网址 https://applet-base-api-t.itheima.net/docs-uni-shop/index.htm 就可以查看对应的文档 2. 配置uni-app的开发环境 可以先打开这个的官网 https://uniapp.dcloud.net.cn/ 使用这个就可以发布到…...

网件r7000刷回原厂固件合集测评

《网件R7000路由器刷回原厂固件详解》 网件R7000是一款备受赞誉的高性能无线路由器&#xff0c;其强大的性能和可定制性吸引了许多高级用户。然而&#xff0c;有时候用户可能会尝试第三方固件以提升功能或优化网络性能&#xff0c;但这也可能导致一些问题&#xff0c;如系统不…...

微信登录模块封装

文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十三.高级定时器

一、高级定时器简介 高级定时器的简介在前面一章已经介绍过&#xff0c;可以点击下面链接了解&#xff0c;在这里进行一些补充。 [STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器 1.1 功能简介 1、高级定时器可以向上/向下/两边计数&#xff0c;还独有一个重复计…...

后台管理系统通用页面抽离=>高阶组件+配置文件+hooks

目录结构 配置文件和通用页面组件 content.config.ts const contentConfig {pageName: "role",header: {title: "角色列表",btnText: "新建角色"},propsList: [{ type: "selection", label: "选择", width: "80px&q…...

如何用MAA自动化助手彻底解放你的《明日方舟》游戏时间:5个实用技巧

如何用MAA自动化助手彻底解放你的《明日方舟》游戏时间&#xff1a;5个实用技巧 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址…...

桌面端酷安社区体验:Coolapk UWP 完整使用指南

桌面端酷安社区体验&#xff1a;Coolapk UWP 完整使用指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 你是否曾经希望在电脑大屏幕上舒适地浏览酷安社区&#xff0c;摆脱手机小屏幕的…...

东南亚1.5亿数字钱包用户如何覆盖?Antom收单解决方案拆解

在东南亚&#xff0c;很多用户第一次完成线上付款可能不是通过信用卡&#xff0c;而是通过自己熟悉的本地电子钱包。从印尼的GoPay、DANA&#xff0c;到菲律宾的GCash&#xff0c;再到泰国的TrueMoney、马来西亚的Touch ‘n Go&#xff0c;电子钱包已经深度融入当地人的日常消费…...

批量转账工具评测:GTokenTool 凭什么成为 Web3 首选?

GTokenTool 是一个支持多链、不涉及代码操作的综合性 Web3 工具箱。它的批量转账功能支持一键分发 ERC-20 和 NFT 代币&#xff0c;特别适合用来高效完成各类代币分发任务&#xff0c;最高能节省 90% 的 Gas 费&#xff0c;且其合约模板已通过多重安全审计。 下面我按照新手最关…...

Taotoken 的 Token Plan 套餐如何帮助个人开发者控制预算

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken 的 Token Plan 套餐如何帮助个人开发者控制预算 对于个人开发者或小型工作室而言&#xff0c;在探索和集成大模型能力时&…...

解锁B站高清与会员视频:基于you-get与EditThisCookie的自动化下载方案

1. 为什么需要you-get与EditThisCookie组合方案 每次在B站看到喜欢的视频想保存下来&#xff0c;你是不是也遇到过这样的烦恼&#xff1f;用普通下载工具要么画质模糊得像打了马赛克&#xff0c;要么遇到会员专属内容直接提示"无权限"。作为常年混迹技术社区的老司机…...

基于OpenTelemetry构建企业级可观测性:从设计到生产实践

1. 项目概述&#xff1a;从“黑盒”到“白盒”的工程实践在分布式系统、微服务架构乃至复杂的单体应用开发中&#xff0c;我们常常面临一个共同的困境&#xff1a;系统内部的状态如同一个“黑盒”。当线上服务出现响应缓慢、内存泄漏或偶发性错误时&#xff0c;传统的日志&…...

轨道交通条形屏电源技术分析:超薄化与高可靠性的工程平衡

一、行业背景与技术挑战在智慧城轨建设中&#xff0c;地铁站内条形屏是乘客信息显示系统的核心终端设备。该应用场景对配套电源提出以下技术要求&#xff1a;技术需求具体指标工程挑战超薄化整机厚度3-8mm传统变压器/散热器高度难以压缩高可靠性MTBF≥50000小时轨道交通振动、温…...

在Python项目中管理多个Taotoken API Key实现访问控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Python项目中管理多个Taotoken API Key实现访问控制 在开发基于大语言模型的应用程序时&#xff0c;一个常见的需求是为不同的功…...

微软UFO项目:统一AI模型调用的抽象层设计与工程实践

1. 项目概述&#xff1a;当“统一”成为AI开发的新范式最近在折腾大模型应用开发的朋友&#xff0c;可能都绕不开一个痛点&#xff1a;模型太多&#xff0c;工具链太杂。想用闭源的GPT-4处理文本&#xff0c;用开源的Llama搞本地推理&#xff0c;再用DALL-E 3生成图片&#xff…...