【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的话,不是严格要求返回值必须是空

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

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

相关文章

C++模板编程——可变参函数模板

目录 1. 可变参函数模板基本介绍 2. 参数包展开——通过递归函数 3. 参数包展开——通过编译期间if语句(constexpr if) 4. 重载 5. 后记 进来看的小伙伴们应该对C中的模板有了一定了解&#xff0c;下面给大家介绍一下可变参函数模板。过于基础的概念将不仔细介绍。 1. 可变…

ChatGPT-4o和ChatGPT-4o mini的差异点

在人工智能领域&#xff0c;OpenAI再次引领创新潮流&#xff0c;近日正式发布了其最新模型——ChatGPT-4o及其经济实惠的小型版本ChatGPT-4o Mini。这两款模型虽同属于ChatGPT系列&#xff0c;但在性能、应用场景及成本上展现出显著的差异。本文将通过图文并茂的方式&#xff0…

三数之和(15)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 可以一起总结的题目&#xff1a;三角形的最大周长&#xff08;976&#xff09;-CSDN博客 解法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector…

2025最新源支付V7全套开源版+Mac云端+五合一云端

2025最新源支付V7全套开源版Mac云端五合一云端 官方1999元&#xff0c; 最新非网上那种功能不全带BUG开源版&#xff0c;可以自己增加授权或二开 拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI&#xff0c;让您能更方便快捷地解决知识付费和运营赞助的难题 它基于…

9 点结构模块(point.rs)

一、point.rs源码 use super::UnknownUnit; use crate::approxeq::ApproxEq; use crate::approxord::{max, min}; use crate::length::Length; use crate::num::*; use crate::scale::Scale; use crate::size::{Size2D, Size3D}; use crate::vector::{vec2, vec3, Vector2D, V…

数据分析系列--[12] RapidMiner辨别分析(含数据集)

一、数据准备 二、导入数据 三、数据预处理 四、建模辨别分析 五、导入测试集进行辨别分析 一、数据准备 点击下载数据集 二、导入数据 三、数据预处理 四、建模辨别分析 五、导入测试集进行辨别分析 Ending, congratulations, youre done.

Day33【AI思考】-函数求导过程 的优质工具和网站

文章目录 **函数求导过程** 的优质工具和网站**一、动态图形工具**1. **Desmos&#xff08;网页端&#xff09;**2. **GeoGebra&#xff08;全平台&#xff09;** **二、分步推导工具**3. **Wolfram Alpha&#xff08;网页/App&#xff09;**4. **Symbolab&#xff08;网页/App…

个人笔记(很没营养,纯备忘录)

1.输入电阻和输出电阻指在一个可划分为3部分的电路中&#xff0c;中间部分电路相当于前面电路的负载有输入端电阻&#xff0c;称输入电阻&#xff0c;相对于后面部分等效为电源有输出端内阻&#xff0c;称输出电阻 理所当然的希望输出电阻对负载影响小&#xff0c;输入电阻能完…

当卷积神经网络遇上AI编译器:TVM自动调优深度解析

从铜线到指令&#xff1a;硬件如何"消化"卷积 在深度学习的世界里&#xff0c;卷积层就像人体中的毛细血管——数量庞大且至关重要。但鲜有人知&#xff0c;一个简单的3x3卷积在CPU上的执行路径&#xff0c;堪比北京地铁线路图般复杂。 卷积的数学本质 对于输入张…

51单片机 02 独立按键

一、独立按键控制LED亮灭 轻触按键&#xff1a;相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…

系统URL整合系列视频二(界面原型)

视频 系统URL整合系列视频二&#xff08;界面原型&#xff09; 视频介绍 &#xff08;全国&#xff09;大型分布式系统Web资源URL整合需求界面原型讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格&#xff0c;控制粒度也越来越细。安全级别提高的同时也增加…

vscode命令面板输入 CMake:build不执行提示输入

CMake&#xff1a;build或rebuild不编译了&#xff0c;弹出:> [Add a new preset] , 提示输入发现settings.jsons设置有问题 { "workbench.colorTheme": "Default Light", "cmake.pinnedCommands": [ "workbench.action.tasks.configu…

wax到底是什么意思

在很久很久以前&#xff0c;人类还没有诞生文字之前&#xff0c;人类就产生了语言&#xff1b;在诞生文字之前&#xff0c;人类就已经使用了语言很久很久。 没有文字之前&#xff0c;人们的语言其实是相对比较简单的&#xff0c;因为人类的生产和生活水平非常低下&#xff0c;…

SSRF 漏洞利用 Redis 实战全解析:原理、攻击与防范

目录 前言 SSRF 漏洞深度剖析 Redis&#xff1a;强大的内存数据库 Redis 产生漏洞的原因 SSRF 漏洞利用 Redis 实战步骤 准备环境 下载安装 Redis 配置漏洞环境 启动 Redis 攻击机远程连接 Redis 利用 Redis 写 Webshell 防范措施 前言 在网络安全领域&#xff0…

【周易哲学】生辰八字入门讲解(八)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解【周易哲学】生辰八字入门讲解&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目录 一、六亲女命六亲星六亲宫位相互关系 男命六亲星…

CAN总线数据采集与分析

CAN总线数据采集与分析 目录 CAN总线数据采集与分析1. 引言2. 数据采集2.1 数据采集简介2.2 数据采集实现3. 数据分析3.1 数据分析简介3.2 数据分析实现4. 数据可视化4.1 数据可视化简介4.2 数据可视化实现5. 案例说明5.1 案例1:数据采集实现5.2 案例2:数据分析实现5.3 案例3…

【c++】类与对象详解

目录 面向过程思想和面向对象思想类的定义引入类的关键字类定义的两种方式类的访问限定符类的作用域类大小的计算封装 this指针类的6个默认成员函数构造函数初步理解构造函数深入理解构造函数初始化列表单参数构造函数引发的隐式类型转换 析构函数拷贝构造函数赋值运算符重载运…

大模型训练(5):Zero Redundancy Optimizer(ZeRO零冗余优化器)

0 英文缩写 Large Language Model&#xff08;LLM&#xff09;大型语言模型Data Parallelism&#xff08;DP&#xff09;数据并行Distributed Data Parallelism&#xff08;DDP&#xff09;分布式数据并行Zero Redundancy Optimizer&#xff08;ZeRO&#xff09;零冗余优化器 …

陆游的《诗人苦学说》:从藻绘到“功夫在诗外”(中英双语)mastery lies beyond poetry

陆游的《诗人苦学说》&#xff1a;从藻绘到“功夫在诗外” 今天看万维钢的《万万没想到》一书&#xff0c;看到陆游的功夫在诗外的句子&#xff0c;特意去查找这首诗的原文。故而有此文。 我国学人还往往过分强调“功夫在诗外”这句陆游的名言&#xff0c;认为提升综合素质是一…

DeepSeek-R1 低成本训练的根本原因是?

在人工智能领域&#xff0c;大语言模型&#xff08;LLM&#xff09;正以前所未有的速度发展&#xff0c;驱动着自然语言处理、内容生成、智能客服等众多应用的革新。然而&#xff0c;高性能的背后往往是高昂的训练成本&#xff0c;动辄数百万美元的投入让许多企业和研究机构望而…