【TS】typescript基础知识

news2024/9/29 1:21:09

一、类型注解

: number就是类型注解,为变量添加类型约束的方式,约定了什么类型,就只能给变量赋什么类型的值

let age: number = 18

二、变量命名规则和规范

命名规则:变量名称只能出现数字,字母,下划线(_),美元符号($),并且不能以数字开头

命名规范:变量名称有意义,推荐使用驼峰命名法(首字母小学,后面每个单词首字母大写)

三、数据类型

原始类型:基本数据类型:number、string、boolean、underfiend、null

//number类型
let size: number = 18
//string类型
let food: string = 'ice cream'
//boolean类型
let isOpen: boolean = true
//underfiend类型
let u: underfiend = underfiend 
//null类型
let n: null = null

对象类型:复杂数据类型
对象类型注解,ts中的对象是结构化的,在使用对象前,可以根据需求,提前设计好对象的结构

//类型注解(对象的结构化类型),建立一种契约,约束对象的结构,类型注解中键值对的值为类型
let person : {
name:string;
age: number
}
//ts中的对象
person = {
name:'llh';
age: 36
}

对象方法的类型注解:

let p1 :{
sayHi:()=>void //无参数无返回值
}
let p1 = {
sayHi:function(){
console.log(1)
}
}

let p2: {
sing:(name:string) => void   //有参数无返回值
}
let p2 = {
sing:function(name: string){
console.log(2)
}
}

let p3 :{
sum: (num1:number,num2:number) => number  //有参数有返回值
}
let p3 = {
sum:function(num1:number,num2:number){
return num1 + num2
}
}

数组对象

let nums: number[] = [10,20,30,40,]
let sum: number = 0
for(let i = 0,u<nums.length,i++){
sum+=nums[i]
console.log(sum) //100
}

forEanch的回调函数,是否需要为参数或返回值指定类型注解?
不需要,此处的回调函数,是作为forEach方法的实参传入,不应该指定类型注解
ts创建forEach方法的时候,就已经指定好了forEach方法的参数以及参数的类型注解
如:

function forEach(callbackfn:(value:string,index: number)=>void)

forEach(function(value,index){})

四、接口的使用

直接在对象名称后写类型注解,1代码结构不简洁 2无法复用类型注解
如:

let p1 :{
name: string,
age: number,
sayHi:()=>void 
} = {
name:'llh',
age:36,
sayHi:function(){
console.log(1)
}
}


let p2 :{
name: string,
age: number,
sayHi:()=>void 
} = {
name:'fdb',
age:16,
sayHi:function(){
console.log(1)
}
}

使用接口,为对象的类型注解命名,并为代码建立契约来约束对象的结构,接口名称约定以I开头
语法:

interface IUser {
name: string
age: number
}

使用:

let p1: IUser  = {
name:'llh',
age:36,
sayHi:function(){
console.log(1)
}
}
let p1: IUser  = {
name:'fdb',
age:16,
sayHi:function(){
console.log(1)
}
}

五、TS类型推论

在TS中,某些没有明确指出类型的地方,类型推论会帮助提供类型,类型注解可省略不写
使用场景:
1、声明变量并初始化时

interface IUser {
name: string
}
let age: number = 18
如果改成以下写法也可以
let age = 18 

类型推论给出来的还是number,类型推论根据值推论出是数值类型
在这里插入图片描述

let person: IUser ={
name:'lilianhua'
}
等同于
let person ={
name:'lilianhua'
}

如果先声明变量后赋值,则不会类型推论,如:

let num ;
num = 12

any代表任意类型
在这里插入图片描述
2、决定函数返回值时

function sum (num1: number,num2: number): number{
return num1 + num2
}
sum(1,6)

等同于:
function sum (num1: number,num2: number){
return num1 + num2
}
sum(1,6)

TS会根据rerurn后面返回的内容推论出函数返回值的类型,如果return 后面的是true,那函数返回值就变成了boolean
在这里插入图片描述

六、TS类型断言

调用querySelector()通过id获取DOM元素时,拿到的元素类型都是Element。因为无法根据id来确定元素的类型,所以该方法返回了一个宽泛的类型,元素类型(Element)
元素类型只包含所有元素共有的属性和方法,如id属性,但是如果是img标签,则拿不到img元素的src属性

类型断言可以手动指定更加具体的类型
语法:

值 as 更具体的类型

如:

let img = document.querySelector('#image')
改为
let img = document.querySelector('#image') as HTMLImageElement
意为:我们确定id="image"的元素是图片元素,我们将类型指定为HTMLImageElement

小技巧:通过console.dir()打印DOM元素,在属性的最后面,即可看到该元素的类型

console.dir(img)

在这里插入图片描述

七、TS对象枚举

ts枚举 enum 枚举名称 {成员1,成功2,…},约定枚举名称,成员名称以大写字母开头

enum Gender {Female,Male}

枚举使用,枚举是一种类型,因此可以作为变量的类型注解

enum Gender {Female,Male}
let userGender: Gender

访问枚举Gender 中的成员,作为变量userGender的值,枚举成员只读,不可编辑

enum Gender {Female,Male}
let userGender: Gender = Gender.Famale
userGender = userGender.Famale ? Gender.Famale :Gender.Male

枚举成员是有值的,默认为从0开始自增的数值,枚举成员的值为数字的枚举,称为数字枚举

enum Gender {
Female,//0
Male,//1
a,//2
b,//3
c//4
}

枚举成员可以初始化值

enum Gender {
Female = 1,
Male = 2,
a = 44,
b = 55,
c = 66
}

枚举成员的值为字符串的枚举,称为字符串枚举,字符串枚举没有自增行为,因此每个成员必须有初始值

enum Gender {
Female = '女',
Male = '男',

}

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

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

相关文章

无涯教程-Python - 环境设置

Python在包括Linux和Mac OS X在内的各种平台上都可用。让无涯教程了解如何安装设置Python环境。 最新的源代码,二进制文件,文档,新闻等可在Python的官方网站上找到https://www.python.org/ 您可以从https://www.python.org/doc/该文档有HTML,PDF和PostScript格式。 安装Pyth…

SD内存卡格式化后如何数据恢复教程

SD内存卡是一种常用的存储设备&#xff0c;可用于储存各种类型的数据&#xff0c;包括照片、音频、视频等。在使用过程中&#xff0c;你是否因为SD卡格式化而失去了重要数据而感到困扰&#xff1f;那么这篇文章的内容将能够帮助您快速有效地恢复格式化后的数据。 图片来源于网络…

python编写四画面同时播放swap视频

当代技术让我们能够创建各种有趣和实用的应用程序。在本篇博客中&#xff0c;我们将探索一个基于wxPython和OpenCV的四路视频播放器应用程序。这个应用程序可以同时播放四个视频文件&#xff0c;并将它们显示在一个GUI界面中。 C:\pythoncode\new\smetimeplaymp4.py 准备工作…

Unity实现广告滚动播放、循环播放、鼠标切换的效果

效果&#xff1a; 场景结构&#xff1a; 特殊物体&#xff1a;panel下面用排列组件horizent layout group放置多个需要显示的面板&#xff0c;用mask遮罩好。 using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; using Unity…

达梦数据库curd的简单使用

目录 添加表空间 删除表空间 添加表空间 create tablespace "test_db" datafile E:\dm_data\DM6.DBF size 32--制定路径 create tablespace “test_db”&#xff1a;创建一个名为test_db的表空间 datafile ‘DM6.DBF’&#xff1a;表示数据文件名为TDM6.DBF&…

胖小酱之听话

首先&#xff0c;我们来看看何为“物质奖励”&#xff1f; 所谓的物质奖励&#xff0c;简单通俗地说就是运用物质上的满足&#xff0c;去调动孩子的积极、主动和创造能力&#xff0c;其中物质奖励的形式一般体现在各种实物的需求方面&#xff0c;比如游戏机、玩具车、手机…

富仕转债上市价格预测

富仕转债 基本信息 转债名称&#xff1a;富仕转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;5.7亿元。 正股名称&#xff1a;四会富仕&#xff0c;今日收盘价&#xff1a;36.29元&#xff0c;转股价格&#xff1a;41.77元。 当前转股价值 转债面值 / 转…

Windows共享文件夹,用户密码访问

Windows共享文件夹&#xff0c;用户密码访问 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.先创建一个用户 计算机右键----管理----本地用户和组----点击用户进去---右键新建用户 这里以kk为例 2.找到你想共享的文件夹 3.共享-想共享的文件夹---右键---属性---共…

优化Python代理爬虫的应用

当我们在资源受限的环境中使用Python代理爬虫时&#xff0c;我们需要采取一些优化措施&#xff0c;以确保程序的高效性和稳定性。在本文中&#xff0c;我将分享一些关于如何优化Python代理爬虫在资源受限环境下的应用的实用技巧。 首先我们来了解&#xff0c;哪些情况算是资源…

Anolis 8.6 下 Redis 7.2.0 集群搭建和配置

Redis 7.2.0 搭建和集群配置 一.Redis 下载与单机部署1.Redis 下载2.虚拟机配置3.Redis 单机源码安装和测试4.Java 单机连接测试1.Pom 依赖2.配置文件3.启动类4.配置类5.单元测试6.测试结果 二.Redis 集群部署1.主从1.从节点配置2.Java 测试 2.哨兵1.哨兵节点配置2.复制一个哨兵…

tkinter自定义多参数对话框

文章目录 参数对话框自定义参数对话框 参数对话框 tkinter提供了三种参数对话框&#xff0c;用于输出浮点型、整型和字符串&#xff0c;分别是askfloat, askinteger以及askstring&#xff0c;使用方法如下 代码如下 import tkinter as tk from tkinter.simpledialog import *…

使用StreamLold写入 Starrocks报错:Caused by org

问题描述 使用StreamLoad写入Starrocks报错&#xff0c;报这个错误:Caused by: org.apache.http.ProtocolException: Content-Length header already present 代码案例 引入依赖 <!-- Starrocks使用StreamLoad发送Http请求 --><dependency><groupId>or…

三维模型OBJ格式轻量化压缩变形现象分析

三维模型OBJ格式轻量化压缩变形现象分析 三维模型的OBJ格式轻量化压缩是一种常见的处理方法&#xff0c;它可以减小模型文件的体积&#xff0c;提高加载和渲染效率。然而&#xff0c;在进行轻量化压缩过程中&#xff0c;有时会出现模型变形的现象&#xff0c;即压缩后的模型与…

【面试高频题】值得仔细推敲的贪心及其证明

题目描述 这是 LeetCode 上的 「1846. 减小和重新排列数组后的最大元素」 &#xff0c;难度为 「中等」。 Tag : 「贪心」 给你一个正整数数组 arr。 请你对 arr 执行一些操作&#xff08;也可以不进行任何操作&#xff09;&#xff0c;使得数组满足以下条件&#xff1a; arr 中…

Cesium.Entity图片纹理在不同观察角度有不同亮度

Cesium.Entity图片纹理在不同观察角度有不同亮度 测试代码&#xff1a; viewer.entities.add({rectangle: {coordinates: Cesium.Rectangle.fromDegrees(-92.0, 30.0, -76.0, 40.0),material: "../images/rect.png",} }); 测试图片&#xff1a; rect.png 这个图片…

vue 学习笔记 简单实验

1.代码(html) <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"counter">Counter: {{ counter }} </div> <script> const Counter {data() {return {counter: 5}} } Vue.cr…

★80交流驱动器通过rs485接口设置速度(附ascii表)

1抓取的数据及解析 2手册上的通信协议及数据帧说明 说明:双向传输项目 3硬件接线注意事项 用的RSJ45端子&#xff0c;双传项目中&#xff0c;一头用的pin6的水晶头子&#xff08;直流离心机上用过是可以的&#xff09;&#xff0c;另一个用的pin8的水晶头子&#xff0c;这里最…

Linux常用命令——dhcrelay命令

在线Linux命令查询工具 dhcrelay 使用dhcrelay命令可以提供中继DHCP和BOOTP请求 补充说明 dhcrelay命令使用dhcrelay命令可以提供中继DHCP和BOOTP请求&#xff0c;从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用&am…

【MPLS LDP】安全策略

正在备考华为认证的小伙伴应该知道&#xff0c;除了理论知识外&#xff0c;刷题也相当重要&#xff0c;周工这里有一份HCIAHCIP-Datacom带解析的最新题库 点赞留言 即可领取。 LDP协议 安全策略介绍 LDP MD5验证 MD5称为Message-Digest Algorithm 5&#xff0c;是国际标准摘…

面试题(一)

目录 一.@Transactional 原理和常见的坑 前期准备 事务不生效的几种 Case 原理 源码解读 @Transactional 执行机制 private 导致事务不生效原因 异常不匹配原因 两种 @Transactional Spring @Transactional javax.transaction.Transactional 二.@Autowired 和 @R…