TypeScript基础学习
目录
一、安装
1、下载国内镜像
2、安装
3、查看安装情况
4、使用例子
二、变量声明
1、规则
2、声明的四种方式
3、注意
4、类型断言
5、类型推断
6、变量作用域
三、基础类型(共11种)
1、Any 类型
2、Null 和 Undefined
3、never 类型
四、every循环
五、函数
1、函数返回值
2、带参函数
3、可选参数和默认参数
4、剩余参数
5、构造函数
6、递归函数
7、函数重载
一、安装
1、下载国内镜像
npm config set registry https://registry.npmmirror.com
2、安装
npm install -g typescript
3、查看安装情况
安装完成后我们可以使用 tsc 命令来执行 TypeScript 的相关代码,以下是查看版本号:
tsc -v
4、使用例子
(1)新建try1.ts文件
const hello : string = "Hello"
console.log(hello);
(2)将 TypeScript 转换为 JavaScript 代码,在终端输入
tsc try1.ts
当前目录下(与 try1.ts 同一目录)就会生成一个 try1.js 文件
(3)使用 node 命令来执行 try1.js 文件
node try1.js
二、变量声明
1、规则
(1)变量名称可以包含数字和字母
(2)除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格
(3)变量名不能以数字开头
2、声明的四种方式
(1)声明变量的类型及初始值 var [变量名] : [类型] = 值;
var uname:string = "Runoob";
(2)声明变量的类型,但没有初始值,变量值会设置为 undefined var [变量名] : [类型];
var uname:string;
(3)声明变量的初始值,但不设置类型,该变量可以是任意类型 var [变量名] = 值;
var uname = "Runoob";
(4)声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined var [变量名];
var uname;
3、注意
(1)变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名
(2)TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译错误
4、类型断言
(1)介绍
①手动指定一个值的类型,即允许变量从一种类型更改为另一种类型
②格式:<类型>值 或 值 as 类型
(2)实例
lean-ts.ts
var str = '1'
var str2:number = <number> <any> str //str、str2 是 string 类型
console.log(str2)
终端ts转换生成的js文件
var str = '1';
var str2 = str; //str、str2 是 string 类型
console.log(str2);
(3)类型断言不是类型转换,意味着断言只是纯粹一个编译时的语法,为编译器提供分析代码的方法
5、类型推断
(1)当类型没有给出时,TypeScript 编译器利用类型推断来推断类型
(2)缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型
var num = 2;// 类型推断为 number
console.log("num 变量的值为" + num);
num = '12';// 编译错误
console.log(num);
6、变量作用域
变量作用域指定了变量定义的位置,TypeScript 有以下几种作用域:
(1)全局作用域:定义在程序结构的外部,可以在代码的任何位置使用
(2)类作用域:这个变量也可以称为 字段,类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。
(3)局部作用域:局部变量只能在声明它的一个代码块(方法)中使用
lean-ts.ts文件
var global_num = 12 // 全局变量
class Numbers {num_val = 13; // 实例变量static sval = 10; // 静态变量storeNum(): void {var local_num = 14; // 局部变量}
}
console.log("全局变量为: " + global_num)
console.log(Numbers.sval) // 静态变量
var obj = new Numbers();
console.log("实例变量: " + obj.num_val)
终端tsc转换成lean-ts.js
var global_num = 12; // 全局变量
var Numbers = /** @class */ (function () {function Numbers() {this.num_val = 13; // 实例变量}Numbers.prototype.storeNum = function () {var local_num = 14; // 局部变量};Numbers.sval = 10; // 静态变量return Numbers;
}());
console.log("全局变量为: " + global_num);
console.log(Numbers.sval); // 静态变量
var obj = new Numbers();
console.log("实例变量: " + obj.num_val);
三、基础类型(共11种)
数据类型 | 关键字 | 描述 |
---|---|---|
任意类型 | any | 声明为 any 的变量可以赋予任意类型的值 |
数字类型 | number | 双精度 64 位浮点值。它可以用来表示整数和分数。 let binaryLiteral: number = 0b1010; // 二进制 let octalLiteral: number = 0o744; // 八进制 let decLiteral: number = 6; // 十进制 let hexLiteral: number = 0xf00d; // 十六进制 |
字符串类型 | string | 一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。 let name: string = "Runoob"; let years: number = 5; let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`; |
布尔类型 | boolean | 表示逻辑值:true 和 false。 let flag: boolean = true; |
数组类型 | 无 | 声明变量为数组。 // 在元素类型后面加上[] let arr: number[] = [1, 2];// 或者使用数组泛型 let arr: Array<number> = [1, 2]; |
元组 | 无 | 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。 let x: [string, number]; x = ['Runoob', 1]; // 运行正常 x = [1, 'Runoob']; // 报错 console.log(x[0]); // 输出 Runoob |
枚举 | enum | 枚举类型用于定义数值集合。 enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 输出 2 |
void | void | 用于标识方法返回值的类型,表示该方法没有返回值。 function hello(): void {alert("Hello Runoob"); } |
null | null | 表示对象值缺失。 |
undefined | undefined | 用于初始化变量为一个未定义的值 |
never | never | never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。 |
注意:TypeScript 和 JavaScript 没有整数类型。
1、Any 类型
(1)变量值会动态改变时,可以让这些变量跳过编译阶段的类型检查
let x: any = 1; // 数字类型
console.log(x);
x = 'I am who I am'; // 字符串类型
console.log(x);
x = false; // 布尔类型
console.log(x);
(2)定义存储各种类型数据的数组
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
console.log(arrayList[1]);
2、Null 和 Undefined
(1)null:表示 "什么都没有",一个空对象引用,只有一个值的特殊类型
(2)undefined:一个没有设置值的变量,typeof 一个没有值的变量会返回 undefined
(3)Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined。而在TypeScript中启用严格的空校验(--strictNullChecks)特性,就可以使得null 和 undefined 只能被赋值给 void 或本身对应的类型,示例代码如下:
①启用 --strictNullChecks,错误写法
// 启用 --strictNullChecks
let x: number;
x = 1; // 编译正确
x = undefined; // 编译错误
x = null; // 编译错误
②启用 --strictNullChecks,正确写法
// 启用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 编译正确
x = undefined; // 编译正确
x = null; // 编译正确
3、never 类型
(1)never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环),示例代码如下
①数字类型不能转为 never 类型
let x: never;
// 编译错误,数字类型不能转为 never 类型
x = 123;
②never 类型可以赋值给 never、数字类型
let x: never;
let y: number;// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})();// 运行正确,never 类型可以赋值给 数字类型
y = (()=>{ throw new Error('exception')})();// 返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {throw new Error(message);
}// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {while (true) {}
}
四、every循环
let list = [1,2,3]
list.every((val,idx,array)=>{// val:当前值 idx:当前index array:Arrayconsole.log(val,idx,array);return true;
})
五、函数
1、函数返回值
在使用 return 语句时,函数会停止执行,并返回指定的值
(1)格式模板
function function_name():return_type { // 语句return value;
}
-
function_name 函数名称
-
return_type 返回值的类型
-
return 关键词后跟着要返回的结果
-
一般情况下,一个函数只有一个 return 语句
-
返回值的类型需要与函数定义的返回类型(return_type)一致
(2)实例1
function test():number{return 3
}
console.log(test());
(3)实例2
// 函数定义
function greet():string { // 返回一个字符串return "Hello World"
} function caller() { var msg = greet() // 调用 greet() 函数 console.log(msg)
} // 调用函数
caller()
2、带参函数
(1)格式模板
function func_name( param1 [:datatype], param2 [:datatype]) {
}
-
param1、param2 为参数名
-
datatype 为参数类型
(2)实例1
function add(x: number, y: number): number {return x + y;
}
console.log(add(1,2))
(3)实例2
function test(x:number,y:string):boolean{if(typeof(x) == 'number'){return true}else{return false}
}
console.log(test(1,'2'));
3、可选参数和默认参数
(1)可选参数
①参数不可缺失,不可过多
function test(x:string,y:string){return x + '' + y
}
let result1 = test("Bob"); // 错误,缺少参数
let result2 = test("Bob", "Adams", "Sr."); // 错误,参数太多了
let result3 = test("Bob", "Adams"); // 正确
②参数可确实,不可过多
function test(x:string,y?:string){if(y)return x + '' + yelsereturn x
}
let result1 = test("Bob"); // 正确
let result2 = test("Bob", "Adams", "Sr."); // 错误,参数太多了
let result3 = test("Bob", "Adams"); // 正确
③注意:可选参数必须跟在必需参数后面
如果上例想让 firstName 是可选的,lastName 必选,那么就要调整它们的位置,把 firstName 放在后面,如果都是可选参数就没关系
(2)默认参数
①作用:可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数
②模板
function function_name(param1[:type],param2[:type] = default_value) {
}
③注意:参数不能同时设置为可选和默认
④实例
function calculate_discount(price:number,rate:number = 0.50){var discount = price * rateconsole.log("价格为:",discount);
}
calculate_discount(1000)
calculate_discount(1000,0.3)
4、剩余参数
①作用:当不知道要向函数传入多少个参数,可以使用剩余参数来定义,允许我们将一个不确定数量的参数作为一个数组传入
②实例1
function test(x:string,...y:string[]){return x + '' + y.join("")
}
let testValue = test("Zhangsan"," and ","Lisi"," and ","Wangwu"," and ","Zhaoliu")
console.log(testValue);
函数的最后一个命名参数 y 以 ... 为前缀,将成为一个由剩余参数组成的数组,索引值从0(包括)到 y.length(不包括)
②实例2
function addNumbers(...nums:number[]){var i;var sum:number = 0;nums.forEach((item)=>{sum = sum + item})console.log("和为:",sum);
}
addNumbers(1,2,3)
addNumbers(10,10,10,10,10)
5、构造函数
(1)模板
var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)
- arg1, arg2, ... argN:参数列表
- functionBody:一个含有包括函数定义的 JavaScript 语句的字符串
(2)实例
var test = new Function("x","y","return x * y")
var testValue = test(3,4)
console.log(testValue);
6、递归函数
实例:
function factorial(number){if(number <= 0){//停止执行return 1;}else{return (number * factorial(number - 1))//调用自身}
}
console.log(factorial(6));
7、函数重载
(1)介绍:重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表
①参数类型不同:
function disp(string):void;
function disp(number):void;
如果参数类型不同,则参数类型应设置为 any
②参数数量不同:
function disp(n1:number):void;
function disp(x:number,y:number):void;
参数数量不同可以将不同的参数设置为可选
③参数类型顺序不同:
function disp(n1:number,s1:string):void;
function disp(s:string,n:number):void;
(2)实例1
function disp(s1:string):void;
function disp(n1:number,s1:string):void;function disp(x:any,y?:any):void{console.log(x);console.log(y);
}
disp("abc")
disp(1,"xyz")
(3)实例2
①定义函数重载需要定义重载签名和一个实现签名
②重载签名定义函数的形参和返回类型,没有函数体
③一个函数可以有多个重载签名(不可调用)
let suits = ["hearts","spades","clubs","diamonds"]
// 定义重载签名
function greet(person:string):string;
function greet(persons:string[]):string[];
// 定义实现签名
function greet(person:unknown):unknown{if(typeof person === 'string'){return `Hello,${person}!`;}else if(Array.isArray(person)){return person.map(name => `Hello,${name}!`);}throw new Error('Unable to greet');
}
console.log(greet(suits[0]));
console.log(greet(suits));
相关文章:

TypeScript基础学习
目录 一、安装 1、下载国内镜像 2、安装 3、查看安装情况 4、使用例子 二、变量声明 1、规则 2、声明的四种方式 3、注意 4、类型断言 5、类型推断 6、变量作用域 三、基础类型(共11种) 1、Any 类型 2、Null 和 Undefined 3、never 类型…...

AOF日志:宕机了,Redis如何避免数据丢失
当服务器宕机后,数据全部丢失:我们很容易想到的一个解决方案是从后端数据库恢复这些数据,但这种方式存在两个问题:一是,需要频繁访问数据库,会给数据库带来巨大的压力;二是,这些数据…...

【编程】典型题目:寻找数组第K大数(四种方法对比)
【编程】典型题目:寻找数组第K大数(四种方法对比) 文章目录 【编程】典型题目:寻找数组第K大数(四种方法对比)1. 题目2. 题解2.1 方法一:全局排序(粗暴)2.2 方法二&#…...
Vue3 对比 Vue2 的变化
Vue3 对比 Vue2 的变化 1.源码组织方式变化:使用 TS 重写 2.支持 compositionAPI,基于函数的 api,更灵活组织组件逻辑(Vue2 使用 options api) 3.响应式系统提升:Vue3 的响应式数据原理改成了 Proxy,可以监听动态新增删…...

harbor搭建
回到目录 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务 通俗的讲,harbor是一个私人镜像存储服务器 1 下载安装 进入官网,下载一个离线安装包,harbor官网下载 这…...
机器学习05-数据准备(利用 scikit-learn基于Pima Indian数据集作数据预处理)
机器学习的数据准备是指在将数据用于机器学习算法之前,对原始数据进行预处理、清洗和转换的过程。数据准备是机器学习中非常重要的一步,它直接影响了模型的性能和预测结果的准确性 以下是机器学习数据准备的一些常见步骤: 数据收集ÿ…...

【枚举+trie+dfs】CF514 C
Problem - 514C - Codeforces 题意: 思路: 其实是trie上dfs的板题 先把字符串插入到字典树中 对于每次询问,都去字典树上dfs 注意到字符集只有3,因此如果发现有不同的字符,去枚举新的字符 Code: #in…...

【计算机视觉】BLIP:统一理解和生成的自举多模态模型
文章目录 一、导读二、背景和动机三、方法3.1 模型架构3.2 预训练目标3.3 BLIP 高效率利用噪声网络数据的方法:CapFilt 四、实验4.1 实验结果4.2 各个下游任务 BLIP 与其他 VLP 模型的对比 一、导读 BLIP 是一种多模态 Transformer 模型,主要针对以往的…...

【Ansible】Ansible自动化运维工具之playbook剧本搭建LNMP架构
LNMP 一、playbooks 分布式部署 LNMP1. 环境配置2. 安装 ansble3. 安装 nginx3.1 准备 nginx 相关文件3.2 编写 lnmp.yaml 的 nginx 部分3.3 测试 nginx4. 安装 mysql4.1 准备 mysql 相关文件4.2 编写 lnmp.yaml 的 mysql 部分4.3 测试 mysql5. 安装 php5.1 编写 lnmp.yaml 的 …...

Spring中的事务
一、为什么需要事务? 事务定义 将一组操作封装成一个执行单元(封装到一起),要么全部成功,要么全部失败。 为什么要用事务? 比如转账分为两个操作: 第一步操作: A 账户 -100 元…...

38 非法地址访问的 segment fault 的调试
前言 在前面一篇文章 coredump 的生成和使用 中, 我们看到 "测试用例2 - 非法地址访问" 产生了一个 segment fault 我们这里 就来调试一下 这个 segment fault 是怎么回事 测试用例 #include "stdio.h"int main(int argc, char** argv) {int x 2; i…...
c++中c_str()的用法详解
c_str()就是将C的string转化为C的字符串数组!!! C中没有string,所以函数c_str()就是将C的string转化为C的字符串数组,c_str()生成一个const char *指针,指向字符串的首地址。 下文通过3段简单的代码比较分析…...

谈谈关于新能源汽车的话题
新能源汽车是指使用新型能源替代传统燃油的汽车,主要包括纯电动汽车、插电式混合动力汽车和燃料电池汽车等。随着环境污染和能源安全问题的日益突出,新能源汽车已经成为全球汽车行业的发展趋势。下面我们来谈谈关于新能源汽车的话题。 首先,新…...
EventBus 开源库学习(二)
整体流程阅读 EventBus在使用的时候基本分为以下几步: 1、注册订阅者 EventBus.getDefault().register(this);2、订阅者解注册,否者会导致内存泄漏 EventBus.getDefault().unregister(this);3、在订阅者中编写注解为Subscribe的事件处理函数 Subscri…...
4_Apollo4BlueLite电源管理
1.Cortex-M4 Power Modes Apollo4BlueLite支持以下4种功耗模式: ▪ High Performance Active (not a differentiated power mode for the Cortex-M4) ▪ Active ▪ Sleep ▪ Deep Sleep (1)High Performance Mode 高性能模式不是arm定…...

Pytorch入门学习——快速搭建神经网络、优化器、梯度计算
我的代码可以在我的Github找到 GIthub地址 https://github.com/QinghongShao-sqh/Pytorch_Study 因为最近有同学问我如何Nerf入门,这里就简单给出一些我的建议: (1)基本的pytorch,机器学习,深度学习知识&a…...
举例说明typescript的Exclude、Omit、Pick
一、提前知识说明:联合类型 typescript的联合类型是一种用于表示一个值可以是多种类型中的一种的类型。我们使用竖线(|)来分隔每个类型,所以number | string | boolean是一个可以是number,string或boolean的值的类型。…...

记录一次Linux环境下遇到“段错误核心已转储”然后利用core文件解决问题的过程
参考Linux 下Coredump分析与配置 在做项目的时候,很容易遇到“段错误(核心已转储)”的问题。如果是语法错误还可以很快排查出来问题,但是碰到coredump就没办法直接找到问题,可以通过设置core文件来查找问题࿰…...

WPF中自定义Loading图
纯前端方式,通过动画实现Loading样式,如图所示 <Grid Width"35" Height"35" HorizontalAlignment"Center" VerticalAlignment"Center" Name"Loading"><Grid.Resources><DrawingBrus…...

用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
一、实际工作中需要对转换选项细化内容 在昨天我们实现了最简单的半角字符和全角字符相互转换功能,就是将英文字母、阿拉伯数字、标点符号、空格全部进行转换。 在实际工作中,我们有时只想英文字母、阿拉伯数字、标点符号、空格之中的一两类进行转换&a…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...