当前位置: 首页 > news >正文

typeScript 之 基础

工具: PlayGround

源码: GitHub TypeScript


变量声明

typeScript中变量声明注意:

  • 开头不能以数字开头
  • 变量名称可以包含数字和字母
  • 除了下划线_和美元$符号外,不能包含其他任意特殊字符

声明的结构: let 变量名: 类型 = 值

如果没有声明类型,则变量为any类型, 如果没有赋值,则数值为undefined

let name: string = "name";// 没有声明类型,在赋值以后,编译器会对类型进行推导
// 如果不能推导出类型,则被默认为any类型
let value = 10;// 没有赋值表示为undefined
let data;

针对于没有声明的类型,TypeScritp会静态编译,注意警告:

let num = 2;
console.log("num type:", typeof(num));		// "num type:",  "number" 
console.log("num 变量的值为 "+num);				 // "num 变量的值为 2"// Type 'string' is not assignable to type 'number'
// 没有报错,但会有警告
num = "12"; console.log("num type:", typeof(num));    // "num type:",  "string" 
console.log(num);                         // "12" 

基础类型

TypeScript中,内置的数据类型也被称为原始数据类型,主要有:

  • number 双精度64位浮点数,注意 TypeScript和JavaScript没有整数
  • string 存储UTF-16的字符串序列, 可以使用单引号(‘’)或双引号(“”)来包含字符串,使用反引号(`)来格式化文本或内嵌表达式等
  • boolean 布尔类型, 使用truefalse进行判定
  • void 表示不返回任意类型的函数返回类型
  • undefined 表示一个没有设置数据的变量
  • null 表示一个空对象的引用
let data: number = null;// number
let value: number = 0.1;
let decLiteral: number = 6;    				// 十进制
let binaryLiteral: number = 0b1010; 	// 二进制
let octalLiteral: number = 0o744;    	// 八进制
let hexLiteral: number = 0xf00d;    	// 十六进制// string 
let name: string = "TypeScript";
let years: number = 5;
let words: string = `您好,今年是${name}发布${years + 1}周年`;// boolean
let flag: boolean = true;// void 
function Debug(index: number): void {}

在编写程序的时候,可以通过console.log输出日志,使用工具推荐: PlayGround

let dataList = [1, 2, 3];
console.log(dataList);										// [1, 2, 3] let value = 10;
console.log("value: ", value);						// "value: ",  10 let name: string = "TypeScript";
let years: number = 5;
let words: string = `您好,今年是${name}发布${years + 1}周年`;
console.log("Content:" + words);					// "Content:您好,今年是TypeScript发布6周年" 

console.log的不仅支持基础数据,也支持数组,Map相关; 不需要考虑是否存在Lua中的dump相关

// 数组
const numList = [1, 2, 3];
console.log(numList); 
// 输出: [1, 2, 3] // Map列表
let myMap = new Map([["key1", "value1"],["key2", "value2"]
]); 
console.log(myMap);
// 输出: Map (2) {"key1" => "value1", "key2" => "value2"} // String对象
console.log(String);
// 输出: function String() { [native code] } 

其他类型

  • const常量相关
const value = 10;
value = 11;						// Error:  Assignment to constant variable
  • any 表示类型不明确,可以通过赋值改变为不同的类型:
// any类型,表示类型不明确; 可以赋值为不同的类型
let data: any = null;
data = "hello";
data = false;
  • 数组相关, 类型后面有个[]
// 有类型的数组
let numList: number[] = [1, 2];
let strList: string[] = ["heloo", "typeScript"];
// 任意类型数据
let dataList: any[] = [1, false, "hello", 4];
// 泛型数组
let dataList: Array<number> = [1,2,3];
  • enum枚举相关
enum kColor {RED,GREEN,BLUE,
}
let color: kColor = kColor.RED;
  • never类型, 相当于其他类型包含nullundefined的子类型,代表不会出现的值
let x: never;// 运行错误,数字类型不能转为 never 类型
// Type 'number' is not assignable to type 'never'
x = 123;// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})();
  • 注意,可以通过|支持不同的数据类型,比如:
let value: number | string = null;
let value: string | string[];

类型判定typeof

使用typeof可以对数据进行类型判定显示,比如:

console.log(typeof(false));								// "boolean" 
console.log(typeof(1.0));									// "number" 
console.log(typeof(0XFFFF));							// "number" 
console.log(typeof("script"));						// "string" 

其他一些有意思的特性:

// "object"
console.log(typeof(null));
console.log(typeof {});
console.log(typeof []); 									// "undefined"
console.log(typeof(undefined));				// "undefined"				
console.log(typeof(any));							// "undefined"
let data;
console.log(typeof(data));						// "undefined"// 函数相关
function getValue(): number {return 0;
}
console.log(typeof(function));					// "function" 
console.log(typeof(getValue));          // "function" 
console.log(typeof(getValue()));        // "number"// NaN相关
console.log(typeof(NaN));									// "number" 
console.log(typeof(Number.NaN));					// "number" 

我们需要注意下:

  • NaN的类型虽然是number数字类型, 但它真正代表的 非数字数特殊值,用于表示非法的数值  如果两个NaN比较,他们并不相等, 数学运算中较为常见:
console.log(0/0);						// NaN 
console.log(Math.sqrt(-1)); // NaN
console.log(Math.log(-1)); 	// NaN
  • nullundefined 前者表示一个空的引用, 后者表示一个没有设置数据的变量,因此他们的类型并不相同
console.log(typeof(null));				// "object"
console.log(typeof(undefined));		// "undefined"
  • object 它表示一个非原始类型(数字,字符串,布尔)的值,主要作用于数组,对象和函数等,它是一种泛指的类型,可以包括任意类型值。
const numObj = new Number(10);
const strObj = new String("");
console.log(typeof(numObj));        // "object" 
console.log(typeof(strObj));        // "object" 

TypeScript的语言中,如果我们单纯的使用value === null或者!value 这种方式来判定数据的合法性,可能会存在不严谨性。

考虑到数字0、空字符串、false、null、undefined、NaN的情况存在, 我们可以使用Boolean()函数将值转换为布尔值, 然后再进行判定。

const value_1 = Boolean(0);
const value_2 = Boolean("");
const value_3 = Boolean(null);
const value_4 = Boolean(undefined);
const value_5 = Boolean(NaN);
// 输出均为false 
console.log(value_1, value_2, value_3, value_4, value_5);

boxing和unboxing

前面说到了一个Boolean类型的转换,既然支持Boolean类型对象的转换,当然也提供了NumberString类型的转换。

他们支持数字或字符串调用相关的方法接口,以实现一些复杂的逻辑处理。

const numObj = new Number(10);
const strObj = new String("");

但在熟悉JavaScript/typeScript后,会发现类似这样的一个情况:

const str = "hello TypeScript";
console.log(str.toUpperCase());			// "HELLO TYPESCRIPT" const strObj = new String(str);
console.log(strObj.toUpperCase());	// "HELLO TYPESCRIPT" 

string基础数据String对象可以调用相同的函数来实现逻辑, 这个原因在于:

JavaScript/TypeScript允许将数字,字符串等值类型转换为对应的封装对象, 这个转换的过程被称为boxing装箱, 而对应的将一个引用对象类型转换为值类型则被称为unboxing拆箱

在这里简要的说明下,有助于对后面的文章理解。


关键字

最后说下关键字相关,算是对typeScript有个大概的了解:

关键字描述
break/continue跳出循环, break用于跳出当前循环, continue用于跳出当前循环的剩余代码
as类型断言,用于将一个实体断言为特定的类型
try/catch/finally用于捕获和处理异常
switch/case/default条件语句相关,可使用break进行截止
if/else if / else条件语句相关
var/let声明变量的关键字
throw
number/ string/enum基础数据类型: 浮点数,字符串,枚举
true/falseboolean类型值
void/null/any/return/function
static/const静态常量,静态类成员,可以直接访问; 常量必须在声明后初始化
for/do while循环语句
get/set用于对对象属性变量的获取或设置
module/namespacemodule用于定义一个模块,用于组织和封装相关代码, 自TypeScript 2.7版本起,逐渐被namespace代替
type/typeoftype用来做类型别名typeof用来获取数据类型
instanceofJavaScript的运算符,用于检查对象是否是指定类的实例
public/private可用于声明类方法类型是公有还是私有
exportexport用于将模块中的变量,函数,类等导出,使其可以被其他模块使用
import用于导入变量,函数,类相关,与export配对使用
super用于派生类调用基类的构造函数,方法和属性相关
this在类中使用,用于引用当前对象
extends用于类继承相关
implements/interfaceinterface用于定义一个接口,通过implements来实现接口
yield用于定义**生成器(特殊函数,可以在执行过程中暂停和恢复)**函数的暂停点,可以将值返回给调用者

一些简单的实例:

  • var/let 声明变量的关键字
/*
var是ES5及之前的JavaScript的关键字,特点:
* 函数作用域,声明的变量在整个函数体内, 而不仅是在块作用域内
* 变量会提升,声明的变量会提升到函数的顶部, 即可在声明之前使用
* 允许重复声明
*/
function example() {var x = 10;if (true) {var x = 20; // 在同一函数作用域内重复声明变量xconsole.log(x); // 输出:20}console.log(x); // 输出:20
}
example();/*
let是ES6及之后的JavaScript和TypeScript引入的关键子,特点:
* 块作用域, 比如if语句,循环语句,并不是整个函数体内
* 不存在变量提升,必须声明之后才能使用
* 不允许崇明声明,否则会报错
*/
function example2() {let y = 10;if (true) {let y = 20; // 在块级作用域内声明变量yconsole.log(y); // 输出:20}console.log(y); // 输出:10
}
example2();
  • as 用于将一个实体断言为特定的类型
let someValue: any = "hello";
let strLength: number = (someValue as string).length;
console.log(strLength);			// 5
  • try/catch 捕获异常
try {// 可能引发异常的代码throw new Error("Something went wrong!");
} catch (error) {// 异常处理逻辑console.log(error.message);
} finally {// 总是执行的代码块
}
// 输出:Something went wrong!
  • 条件语句相关
// switch/case相关
let fruit = "apple";
switch (fruit) {case "apple":console.log("It's an apple.");break;case "banana":console.log("It's a banana.");break;default:console.log("It's something else.");
}// if/ else if / else相关
let num = 10;
if (num > 0) {console.log("Positive number");
} else if (num < 0) {console.log("Negative number");
} else {console.log("Zero");
}
// 输出:Positive number
  • instanceof 用于检查实例对象是否是特定类的实例
class Animal {// class implementation
}class Dog extends Animal {//
}const animal = new Animal;
const myDog = new Dog();
console.log(animal instanceof Animal);		// true
console.log(myDog instanceof Animal); 		// true
  • export/import
// 模块导出
export const myVariable = 123;
export function myFunction() {// 函数实现
}
export class MyClass {// 类实现
}// 模块导入
import { myVariable, myFunction, MyClass } from './myModule';
  • super 用于子类调用基类的构造函数和方法等
class Parent {private _value: number = 0;constructor(value: number) {// this用作类中对象的引用this._value = value;console.log("Parent constructor:", this._value);}parentMethod() {console.log("Parent parentMethod");}
}// extends 继承
class Child extends Parent {constructor() {super(10); // 调用父类构造函数}childMethod() {super.parentMethod(); // 调用父类方法}
}const child = new Child();
child.childMethod();/*
Parent constructor: 10
Parent parentMethod
*/
  • get/set用于对对象属性变量的获取或设置
class MyClass {private _myProperty: string;get myProperty(): string {return this._myProperty;}set myProperty(value: string) {this._myProperty = value;}
}const myObj = new MyClass();
// 设置对象属性值
myObj.myProperty = "Hello";
// 获取对象属性值
console.log(myObj.myProperty); // 输出 "Hello"
  • interface/implements 定义并实现接口
// 定义接口
interface MyInterface {myMethod(): void;
}// 实现接口
class MyClass implements MyInterface {myMethod() {console.log("Implementing MyInterface");}
}const myObj = new MyClass();
myObj.myMethod(); // 输出 "Implementing MyInterface"
  • yield 生成器函数暂停
function* myGenerator() {yield 1;yield 2;yield 3;
}const generator = myGenerator();
console.log(generator.next().value); // 输出 1
console.log(generator.next().value); // 输出 2
console.log(generator.next().value); // 输出 3

编写可能有误,请您不吝指导。


相关文章:

typeScript 之 基础

工具: PlayGround 源码&#xff1a; GitHub TypeScript 变量声明 typeScript中变量声明注意&#xff1a; 开头不能以数字开头变量名称可以包含数字和字母除了下划线_和美元$符号外&#xff0c;不能包含其他任意特殊字符 声明的结构&#xff1a; let 变量名&#xff1a; 类型…...

android app控制ros机器人五(百度地图)

半吊子改安卓&#xff0c;新增了标签页&#xff0c;此标签页需要显示百度地图 按照官方教程注册信息&#xff0c;得到访问应用AK&#xff0c;步骤也可以参照下面csdn Android地图SDK | 百度地图API SDK 【Android】实现百度地图显示_宾有为的博客-CSDN博客 本人使用的是aar开…...

【ts】【cocos creator】excel表格转JSON

需要将表格导出为text格式放到项目resources/text文件夹下 新建场景&#xff0c;挂载到Canvas上运行 表格文件格式&#xff1a; 保存格式选text tableToJson : import CryptoJS require(./FileSaver);const { ccclass, property } cc._decorator;ccclass export default c…...

每天一个知识点——L2R

面试的时候&#xff0c;虽然做过医疗文献搜索&#xff0c;也应用过L2R的相关模型&#xff0c;但涉及到其中的一些技术细节&#xff0c;都会成为我拿不下offer永远的痛。也尝试过去理解去背下一些知识点&#xff0c;终究没有力透纸背&#xff0c;随着时间又开始变得模糊&#xf…...

解决flutter showDialog下拉框,复选框等无法及时响应的问题

使用StatefulBuilder _showDialogr() {showDialog(context: context,builder: (BuildContext ctx) {return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {return Scaffold(body: Column(children: <Widget>[Container(height: 400,padding: …...

[C++ 网络协议编程] UDP协议

目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 1. UDP和TCP的区别 主要…...

reactNative跳转appstore链接报错:Redirection to URL with a scheme that is not HTTP(S)

在reactnative中webview跳转H5下载页面&#xff0c;包错Redirection to URL with a scheme that is not HTTP(S) 在webview中添加一下代码 const onShouldStartLoadWithRequest (event: any) > {const { url } event;console.log(url);if (url.startsWith(https://itune…...

html css实现爱心

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 爱心 */.lo…...

react中使用shouldComponentUpdate生命周期函数调用setState引起的无限循环的错误

场景&#xff1a; 在 React 组件中&#xff0c;当在 componentWillUpdate 或 componentDidUpdate 生命周期方法中调用 setState 时&#xff0c;会触发无限循环&#xff0c;导致超过最大更新深度。 错误原因 在React组件中 &#xff0c;我们使用componentWillUpdate 或 componen…...

麦肯锡发布《2023科技趋势展望报告》,生成式AI、下一代软件开发成为趋势,软件测试如何贴合趋势?

近日&#xff0c;麦肯锡公司发布了《2023科技趋势展望报告》。报告列出了15个趋势&#xff0c;并把他们分为5大类&#xff0c;人工智能革命、构建数字未来、计算和连接的前沿、尖端工程技术和可持续发展。 类别一&#xff1a;人工智能革命 生成式AI 生成型人工智能标志着人工智…...

【爬虫】P1 对目标网站的背景调研(robot.txt,advanced_search,builtwith,whois)

对目标网站的背景调研 检查 robot.txt估算网站大小识别网站所用技术寻找网站的所有者 检查 robot.txt 目的&#xff1a; 大多数的网站都会包含 robot.txt 文件。该文件用于指出使用爬虫爬取网站时有哪些限制。而我们通过读 robot.txt 文件&#xff0c;亦可以最小化爬虫被封禁的…...

maven如何建立JavaWeb项目并连接数据库,验证登录

这里是建立建立web项目&#xff1a;Maven如何创建Java web项目&#xff08;纯干货版&#xff09;&#xff01;&#xff01;&#xff01;_明天更新的博客-CSDN博客 我们主要演示如何连接数据库验证登录。 1.在webapp目录下创建我们的登录页面&#xff1a;index.jsp 还需要再…...

CVPR 2023 | 用户可控的条件图像到视频生成方法(基于Diffusion)

注1:本文系“计算机视觉/三维重建论文速递”系列之一&#xff0c;致力于简洁清晰完整地介绍、解读计算机视觉&#xff0c;特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。 本次介绍的论…...

动态规划(基础)

一&#xff0c;背包问题 老规矩&#xff0c;上链接&#xff08;http://t.csdn.cn/hEwvu&#xff09; &#xff08;1&#xff09;01背包问题 给定一个承重量为C的背包&#xff0c;n个重量分别为w1​,w2​,...,wn​的物品&#xff0c;物品i放入背包能产生pi​(>0)的价值(i1,…...

【Pytorch:nn.Embedding】简介以及使用方法:用于生成固定数量的具有指定维度的嵌入向量embedding vector

文章目录 1、nn.Embedding2、使用场景 1、nn.Embedding 首先我们讲解一下关于嵌入向量embedding vector的概念 1&#xff09;在自然语言处理NLP领域&#xff0c;是将单词、短语或其他文本单位映射到一个固定长度的实数向量空间中。嵌入向量具有较低的维度&#xff0c;通常在几…...

动态库的命名规则

1、动态库的命名规则&#xff1a;libname.so.x.y.z 名字含义lib这是共享库的前缀name共享库名字x主版本号y次版本号z发布版本号 2、每个版本号的含义 版本号含义主版本号表示库的重大升级&#xff0c;不同主版本号的库之间是不兼容的。依赖旧的主版本号的程序需要改动相应的…...

【Linux】网络---->网络理论

网络理论 网络协议分层模型网络数据的封装于分用地址管理 网络协议分层模型 OSI五层模型&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 应用层&#xff1a;主要负责应用程序间的沟通&#xff0c;代表协议有HTML协议&#x…...

Android学习之路(4) UI控件之输入框

本节引言&#xff1a; 在本节中&#xff0c;我们来学习第二个很常用的控件EditText(输入框)&#xff1b; 和TextView非常类似&#xff0c;最大的区别是&#xff1a;EditText可以接受用户输入&#xff01; 1.设置默认提示文本 如下图&#xff0c;相信你对于这种用户登录的界面并…...

1.初识Web

文章目录 1. 什么是Web?2.初始Web前端2.1.Web标准 1. 什么是Web? web:全球广域网&#xff0c;也称万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 2.初始Web前端 网页有哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接… 我们看到的网页&am…...

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

微服务技术一 技术栈图一、注册中心Eureka概念&#xff1a;搭建EurekaServer服务注册服务发现&#xff08;消费者对提供者的远程调用&#xff09; 二、Ribbon负载均衡负载均衡的原理&#xff1a;LoadBalanced负载均衡的策略&#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安…...

5步精通ComfyUI IPAdapter多模态图像引导配置实战指南

5步精通ComfyUI IPAdapter多模态图像引导配置实战指南 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 在AI图像生成领域&#xff0c;IPAdapter作为连接文本与视觉的桥梁&#xff0c;为创作者提供了前所…...

Qwen3-TTS语音合成5分钟快速部署:10种语言+方言一键搞定

Qwen3-TTS语音合成5分钟快速部署&#xff1a;10种语言方言一键搞定 1. 快速部署指南 1.1 系统环境准备 在开始前&#xff0c;请确保您的系统满足以下基本要求&#xff1a; 操作系统&#xff1a;支持Linux/Windows/macOSPython版本&#xff1a;3.8-3.10内存&#xff1a;至少…...

YOLO-v8.3零售行业应用:货架商品识别,库存管理自动化

YOLO-v8.3零售行业应用&#xff1a;货架商品识别&#xff0c;库存管理自动化 1. 零售行业痛点与解决方案 零售行业每天面临数以万计的商品需要管理&#xff0c;传统的人工盘点方式不仅耗时耗力&#xff0c;还容易出现误差。根据行业统计&#xff0c;一家中型超市每月因库存不…...

Windows Defender Remover终极指南:深度解析系统安全组件移除技术

Windows Defender Remover终极指南&#xff1a;深度解析系统安全组件移除技术 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_…...

NXOpen 遍历部件并对每个部件加属性

NXOpen 遍历部件并对每个部件加属性 // Mandatory UF Includes #include <uf.h> #include <uf_object_types.h> // Internal Includes #include <NXOpen/ListingWindow.hxx> #include <NXOpen/NXMessageBox.hxx> #include <NXOpen/UI.hxx> //…...

文墨共鸣部署案例:中小企业低成本部署水墨风语义分析SaaS前端

文墨共鸣部署案例&#xff1a;中小企业低成本部署水墨风语义分析SaaS前端 1. 项目介绍与价值 文墨共鸣是一个将深度学习技术与传统水墨美学完美结合的语义分析系统。这个项目专门为中文文本设计&#xff0c;能够智能分析两段文字之间的语义相似度&#xff0c;判断它们是"…...

低成本GPU算力玩转大模型编剧:Pixel Script Temple双卡并行部署实操手册

低成本GPU算力玩转大模型编剧&#xff1a;Pixel Script Temple双卡并行部署实操手册 1. 项目概述 Pixel Script Temple是一款专为剧本创作设计的AI工具&#xff0c;基于Qwen2.5-14B-Instruct大模型深度微调而成。它最大的特点是能够在消费级GPU硬件上实现高效运行&#xff0c…...

京东 SPU/SKU 数据接口全解读:商品详情 API 文档(2026 最新版)

京东商品详情 API 体系以SPU&#xff08;标准产品单元&#xff09;聚合、SKU&#xff08;库存单元&#xff09;明细为核心设计&#xff0c;覆盖商家开放平台&#xff08;JOS&#xff09;、京东联盟两大核心场景&#xff0c;支持单品 / 批量查询、全字段 / 指定字段返回&#xf…...

别再盲目调大`--max-memory`!Python服务成本失控的真正元凶藏在这3个被忽略的`__slots__`陷阱里

第一章&#xff1a;Python智能体内存管理策略成本控制策略Python智能体在长期运行、多任务并发或高频率推理场景下&#xff0c;内存使用易呈指数级增长&#xff0c;导致OOM异常与推理延迟上升。有效的内存管理不仅是稳定性保障&#xff0c;更是降低云资源成本的关键杠杆。核心策…...

SeqGPT-560M入门指南:Web界面操作+Jupyter调试+API调用三路径并行

SeqGPT-560M入门指南&#xff1a;Web界面操作Jupyter调试API调用三路径并行 1. 从零开始&#xff1a;认识SeqGPT-560M 如果你正在寻找一个开箱即用、能快速处理中文文本分类和信息抽取的AI工具&#xff0c;那么SeqGPT-560M绝对值得你花十分钟了解一下。 简单来说&#xff0c…...