【TypeScript】基础:数据类型

news/2025/2/3 23:21:56 标签: typescript, javascript, 前端

文章目录

    • 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

二、类型声明

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

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

三、数据类型

any

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

unknown

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

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

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

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

void

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

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

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

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

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

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

!注意:元组不是关键字

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

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

  1. 数字枚举
typescript">  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. 字符串枚举
typescript">  enum Direction{
      Up = "up",
      Down = "down",
      Left = "left",
      Right = "right"
  }
  1. 常量枚举

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

:那么何为内联?

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

Type

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

  1. 创建别名

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

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

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

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

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

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

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

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

http://www.niftyadmin.cn/n/5841112.html

相关文章

【大数据技术】教程01:搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell)

搭建完全分布式高可用大数据集群&#xff08;VMwareCentOSFinalShell&#xff09; 资源下载 VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.isoFinalShell 4.5.12 注&#xff1a;请在阅读本篇文章前&#xff0c;将以上资源下载下来。 写在前面 本章主要介…

Elasticsearch 指南 [8.17] | Search APIs

Search API 返回与请求中定义的查询匹配的搜索结果。 http GET /my-index-000001/_search Request GET /<target>/_search GET /_search POST /<target>/_search POST /_search Prerequisites 如果启用了 Elasticsearch 安全功能&#xff0c;针对目标数据流…

【tiktok 国际版抖抖♬♬ __ac_signature算法】逆向分析

一开始的参数是没有X-Bogus和 __ac_signature的 先是加密请求参数得到乱码。最终得到X-Bogus 然后请求参数添加了X-Bogus之后再去生成__ac_signature __ac_signature的生成需要用到X-Bogus

自定义数据集 使用scikit-learn中svm的包实现svm分类

代码&#xff1a; import numpy as np # 导入用于数值计算的库 import matplotlib.pyplot as plt # 导入用于绘图的库# class1_points 和 class2_points 分别定义了两个类别的数据点&#xff0c;二维坐标 class1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, …

影视文件大数据高速分发方案

在当今的数字时代&#xff0c;影视行业的内容创作和传播方式经历了翻天覆地的变化。随着4K、8K高清视频的普及&#xff0c;以及虚拟现实(VR)和增强现实(AR)技术的发展&#xff0c;影视文件的数据量正以前所未有的速度增长。这就要求行业内的参与者必须拥有高效的大数据传输解决…

[Linux]如何將腳本(shell script)轉換到系統管理服務器(systemd service)來運行?

[InfluxDB]Monitor Tem. and Volt of RaspberryPi and Send Message by Line Notify 在Linux中&#xff0c;shell腳本(shell script)常用於運行各種自動化的流程&#xff0c;包含API串接&#xff0c;設置和啟動應用服務等等&#xff0c;腳本語法也相對易學易讀&#xff0c;因此…

Java泛型深度解析(JDK23)

第一章 泛型革命 1.1 类型安全的进化史 前泛型时代的类型转换隐患 代码的血泪史&#xff08;Java 1.4版示例&#xff09;&#xff1a; List rawList new ArrayList(); rawList.add("Java"); rawList.add(Integer.valueOf(42)); // 编译通过// 灾难在运行时爆发…

为AI聊天工具添加一个知识系统 之75 详细设计之16 正则表达式 之3 正则表达式模板

本文要点 概念图式schema&#xff1a;。处理“我” 立“每一个新提概念的提出都首先是语言的-含糊概念 Notion{ Yes&#xff0c;Unkown,No}&#xff0c;然后才是程序的-模糊符号Notation {True&#xff0c;False}&#xff0c;最后会是数据的-近似值 Approximation{Good,Fair,…