TS数据类型

news2024/12/23 9:39:39

基本数据类型

null undefined number string boolean

对于基本数据类型,可以不写类型注解,ts能通过值来判断变量的类型

let nu = null
let un = undefined
let num = 23
let str = "sdfk"
let isShow = true

引用数据类型

数组

写法1

let arr: number[] = [1, 2, 3]

写法2

let arr1:Array<number|boolean> = [true,23,false]

如果数组中有多种类型,则使用联合类型的写法

let arr2:(number|string)[] = [1,"2",3]

函数

写法

1.分别指定

function add(a: number, b: number): number {
  return a + b
}

let add1 = (a: number, b: number): number => a + b

2.同时指定(参数和返回值都写到一起)

type Add2 = (a: number, b: number) => number
let add2: Add2 = (a, b) => a + b

返回值void类型

在js中函数写返回值,则默认返回undefined

function fn() { }
let a = fn()
console.log(a); // undefined

在ts中,函数没有返回值,返回值为void,而不是undefined

function fn():void { }
let a = fn()
console.log(a); // undefined

可选参数

写法:参数?:类型

注意事项:必选参数必须放在可选参数的前面

function mySlice(a?: number, b?: number) { }
mySlice()
mySlice(1)
mySlice(1, 2)

对象

对象的属性

type Person = {
  name: string,
  age: number,
  // 设置可选属性
  sex?:string
}

const p: Person = {
  name: '张三',
  age: 17,
  sex:'男'
}

对象的方法

type Person = {
  sayHello(str: string): void,
  sayHi: (str: string) => void
}

const p: Person = {
  // ES6所对应的写法
  sayHello(str) {
    console.log("hello, " + str);
  },
  // ES5所对应的写法
  sayHi(str) {
    console.log("hi, " + str);
  }
}

p.sayHello("123") // hello, 123
p.sayHi("456") // hi, 456

代码提示(/ /)*

可增强开发体验

如何使用:通过配置用户代码片段,直接输入cmd命令

type Person = {
  /** 姓名 */
  sdfjskj: string,
  /** 年龄 */
  ewr: number,
  /** 性别 */
  wiersf:string
}

const p: Person = {
  sdfjskj: '李四',
  ewr: 38,
  wiersf:"男"
}

// 通过ctrl+i键查看该属性的中文注释
p.ewr = 18

独有类型

联合类型

作用:可以表示多种类型

type Mytype = string | number | boolean
let arr: Mytype[] = ["dsf", 34, false]

交叉类型

作用:实现多个类型合并到一起

interface A {
  name: string,
  age: number
}

interface B {
  run(): void
}

type MyType = A & B
let obj: MyType = {
  name: '张三',
  age: 23,
  run() {
    console.log("run fast");
  },
}

类型别名type

作用:封装类型,利于复用

写法:type Xxx = 我的类型

type MyType = (number | string | boolean)

let x:MyType = 23
x = "sdf"
x = true
let arr: MyType[] = [12, "df", true]

接口interface

作用:声明对象数据类型

写法:interface Xxx = {}

特点:

1.同名接口会自动合并

interface Person {
  name: string,
  age: number
}

interface Person {
  sex: string
}

const p: Person = {
  name: '张三',
  age: 23,
  sex: '女'
}

2.可以继承其他接口

interface Person {
  name: string,
  age: number
}

interface BlackPerson extends Person {
  run(): void
}

const p: BlackPerson = {
  name: '张三',
  age: 23,
  run() {
    console.log('跑得快');
  }
}

type和interface的区别

  1. type可以定义任意类型,interface只能定义对象类型
  2. interface可以实现同名合并,type不行
  3. interface可以继承,type不行,但是可以使用交叉类型达到同样的效果
type Person = {
  name: string,
  age: number
}

type BlackPerson = {
  run(): void
} & Person

const bp: BlackPerson = {
  run() {
    console.log("跑得快!");
  },
  name: '张三',
  age: 23
}

类型推论

ts可以根据你写的变量,推断出类型,从而我们可以省略类型不写

请添加图片描述

请添加图片描述

字面量类型

本质上就是将js中的值作为类型

使用场景:经常和联合类型一起使用,表示一组可选值

function MyQuerySelector(type: "div" | "button" | "a") { }
MyQuerySelector('div')

请添加图片描述

枚举类型

作用:表示一组可选的值

特点:既可以做类型,也可以当做值来使用

语法:enum 枚举的集合名称 { 自定义属性名称 = 值 }

enum OrderRules {
  yifukuan = 0,
  weifukuan = 1,
  yifahuo = 2,
  weifahuo = 3
} 

function order(value: OrderRules) { 
  console.log("value = "+value);
}

order(OrderRules.weifukuan)
// value = 1

枚举的种类:

1.数字枚举(默认从0开始自动自增)

enum OrderState {
  // yifukuan = 1  表示从1开始自增
  yifukuan,
  weifukuan,
  yifahuo,
  weifahuo
}

function Order(state: OrderState) {
  console.log("state ====> " + state);
}
Order(OrderState.yifukuan)
Order(OrderState.weifukuan)
Order(OrderState.yifahuo)
Order(OrderState.weifahuo)
// state ====> 0
// state ====> 1
// state ====> 2
// state ====> 3

2.字符串枚举(用得很少,还不如用字面量来表示)

enum Direction {
  left = "left",
  right = "right",
  top = "top",
  bottom = "bottom"
}

function go(v: Direction) {
  console.log("go ===> " + v);

}

go(Direction.left)
go(Direction.right)
go(Direction.top)
go(Direction.bottom)
// go ===> left
// go ===> right
// go ===> top
// go ===> bottom

枚举和字面量

相同点:都是表示一组可选的值

区别:

  1. 枚举只能表示字符串或数字,字面量可以表示任意类型
  2. 对于数字枚举,语义化程度更高

any类型

作用:逃避ts的类型检查

let obj: any = {
  name: '李华',
  age: 23,
  sex: '男'
}

扩展

类型断言

作用:告诉ts,以我写的类型为准

使用场景:ts推断类型不准确时

语法:… = 值 as 类型

type MyFile = {
  name: string,
  avator: string
  size:number
}

// 如果刚开始不知道属性值,下面这样写会报错
// let f: MyFile = {}

let f = {} as MyFile
f.avator = "kkk"
f.name = "从你的全世界路过"
f.size = 994

typeof操作符

作用:获取变量的类型

使用场景:根据已有变量的值,来获取该值的类型。

const obj1 = {
  a:{ 
    b: {
      C: {
        d:"d"
      }
    }
  }
}

// 使用typeof获取obj1的类型
const obj2: typeof obj1 = {
  a: {
    b: {
      C: {
        d:'a'
      }
    }
  }
}

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

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

相关文章

iconik--AI智能媒体管理解决方案

ftrack于去年加入Backlight&#xff0c;旗下有Celtx, Iconik, Wildmoka, 和Zype。这些公司都为媒体、娱乐和视频领域的客户提供基于云的解决方案。 今天&#xff0c;我们就来隆重地介绍其中一款软件–iconik&#xff01;谷歌、VICE媒体、亚马逊旗下米高梅、Complex Networks和S…

【C++初阶】C++入门

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C初阶 ⭐代码仓库&#xff1a;C初阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

GMW协议

概述 回顾混淆电路的流程&#xff0c;一方生成加密真值表&#xff0c;另一方执行计算&#xff0c;门电路的输入通过主动发送和不经意传输索取实现&#xff0c;用这样的方式来达到多方计算中一些公平性。 那么是否可以让双方拥有更加对等的地位&#xff0c;让每个参与方都持有一…

华为OD机试真题(Java),数组合并(100%通过+复盘思路)

一、题目描述 现在有多组整数数组&#xff0c;需要将他们合并成一个新的数组。 合并规则从每个数组里按顺序取出固定长度的内容&#xff0c;合并到新的数组&#xff0c;取完的内容会删除掉。 如果改行不足固定长度&#xff0c;或者已经为空&#xff0c;则直接取出剩余部分的内…

Numpy从入门到精通——Numpy运算符|批处理

这个专栏名为《Numpy从入门到精通》&#xff0c;顾名思义&#xff0c;是记录自己学习numpy的学习过程&#xff0c;也方便自己之后复盘&#xff01;为深度学习的进一步学习奠定基础&#xff01;希望能给大家带来帮助&#xff0c;爱睡觉的咋祝您生活愉快&#xff01; 这一篇介绍《…

Android 项目编译 Gradle 配置说明

前言 Android 的Gradle版本更新换代还是很快的&#xff0c;更新换代除了功能上变得强大之外&#xff0c;还会出现很多意料之外的Bug&#xff0c;而很多开发者会被折磨的死去活来&#xff0c;下面我们来看有哪些编译配置。 正文 首先要知道什么时候会进行编译&#xff0c;有以下…

Efficient Attention: Attention with Linear Complexities

paper: https://arxiv.org/pdf/1812.01243.pdf 这里写目录标题 一、引言二、方法实现高效注意力的解释效率优势 三、实验消融插入层键的维度骨干架构 一、引言 注意机制在计算机视觉和自然语言处理中有着广泛的应用。最近的工作开发了点积注意力机制&#xff0c;并将其应用于…

MobileBERT模型简单介绍

目录 一、概要 二、深入扩展 2.1 知识蒸馏方法 2.2 渐进式知识迁移 一、概要 MobileBERT 可以看作一个“瘦身”后的BERT-large模型&#xff0c;其使用了瓶颈结构&#xff08;Bottleneck Structure&#xff09;&#xff0c;并且在自注意力和前馈神经网络的设计上也有一定的改…

图形化之家谱遗传系统

1&#xff1a;废话不多说先看成果。 QQ录屏20230418163603 QQ录屏20230418163732 2&#xff1a;解析&#xff1a; 1&#xff1a;不知道会有多少个孩子&#xff0c;所以我们用二叉树的孩子兄弟结构 typedef struct treeNode {char name[100];//名字int generation;//辈分char g…

Pytorch深度学习笔记(五)反向传播算法

推荐课程&#xff1a;04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型&#xff0c;如图&#xff0c;输入矩阵为5*1矩阵&#xff0c;等一层权重矩阵H1为6*5矩阵&#xff0c;则需要30个解析式&#xff0c;第二层权重矩阵H2为6…

1685_Excel的几种脚本处理方式

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 做个小结&#xff0c;实际上是写的我自己学习的过程。 关于Excel的处理方式很多&#xff0c;我也不会那么多&#xff0c;在这里我只想写一下我自己接触过的。大致是三种方式&a…

Pikachu靶场(Cross-Site Scripting)

Cross-Site Scripting 反射型xss(get)源代码修改限制地址栏 反射性xss(post)存储型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cross-Site Scripting 简称为“CSS”&#xff0c;为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c…

《花雕学AI》25:用文字画出你的非凡想象力,微软新Bing带你体验DALL-E的神奇

你有没有想过用文字来画画&#xff1f;这听起来可能很不可思议&#xff0c;但是现在&#xff0c;你可以通过微软新Bing来实现这个想法。微软新Bing支持AI绘画功能&#xff0c;只要输入一句话&#xff0c;就能生成一幅图像。这个功能是由DALL-E驱动的&#xff0c;DALL-E是一个能…

mybatis03-多表查询、延迟加载、逆向工程

mybatis03 mybatis 多表联查 背景产生&#xff1a;开发过程中单表查询 不能满足项目需求分析功能。对于复杂业务来说&#xff0c;关联的表有几张&#xff0c;甚至几十张 并且表与表之间的关系相当复杂。目的&#xff1a;实现复杂业务功能&#xff0c;必须进行多表查询&#x…

开发插件JFormDesigner(可视化GUI编程)的使用与注册-简单几步即可完成

开发插件JFormDesigner&#xff08;可视化GUI编程&#xff09;的使用与注册 获取链接&#xff1a;1.JFormDesigner获取2.记录插件下载路径3.使用zcj注册4.生成license5.打开idea进行注册 获取链接&#xff1a; https://pan.baidu.com/s/1N9ua2p3BpiMIARCEewRxIw?pwd4e9a 提取…

WebSocket 通信 —— 浏览器原生支持

在上一篇内容中讲到使用Node中的Net核心模块完成socket通信&#xff0c;那么本篇就继续来讲关于浏览器原生支持的 WebSocket &#xff0c;实现通信。那么什么是 WebSocket ? 它是HTML5开始提供的一种浏览器与服务器间进行全双工&#xff08;全双工&#xff1a;同时进行双向传输…

激活函数(Activation Function)及十大常见激活函数

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数&#xff08;图文结合&#xff09; 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…

asp.net+C#房地产销售系统文献综述和开题报告+Lw

本系统使用了B/S模式&#xff0c;使用ASP.NET语言和SQL Server来设计开发的。首先把所有人分为了用户和管理员2个部分&#xff0c;一般的用户可以对系统的前台进行访问&#xff0c;对一般的信息进行查看&#xff0c;而注册用户就可以通过登录来完成对房屋信息的查看和对房屋的…

动态通讯录——C语言【详解+全部码源】

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;进阶C语言&#xff0c;本专栏主要讲解数据存储&#xff0c;进阶指针&#xff0c;动态内存管理&a…

企业数据安全能力建设思路

在现代社会&#xff0c;企业数据安全已经成为一个非常重要的话题。企业数据安全能力的建设是每个企业都必须面对和解决的问题。企业数据安全能力建设思路包括以下几个方面&#xff1a; 1. 建立完善的安全管理制度 企业要建立完善的安全管理制度&#xff0c;包括信息安全政策、…