TypeScript(TS)基础内容详细介绍

news/2024/5/14 20:18:54/文章来源:https://blog.csdn.net/weixin_52984349/article/details/128134365

目录

一、TypeScript概念

二、TypeScript特点

三、开发环境配置

四、初识ts

五、TypeScript类型声明

1、any:

2、number数字类型 

3 string字符串类型 

4 boolean布尔类型 

表示逻辑值:true 和 false。

5 数组类型

6 元组类型

7 enum枚举类型

8 void无任何类型

9 null类型

10 undefined类型

11 never类型

12 unknown类型

13 函数类型

14 对象类型 

15 类型的别名

16 箭头函数

 六、变量声明

七、字面量声明


一、TypeScript概念

以JavaScript为基础构建的语言。微软在js基础上,添加了一些语法。TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

二、TypeScript特点

  1. 静态类型(强类型),声明时确定类型,之后不允许修改。
  2. TypeScript可处理已有的JS,并只对TS代码编译,完善了JS的确定。
  3. 开源(社区成熟),跨平台,所有支持Js代码,都可以使用TS。
  4. 丰富的配置项,强大的开发工具支持等等。

三、开发环境配置

1、下载node.js

下载地址:
下载 | Node.js 中文网

2、 配置国内镜像

npm config set registry

https://registry.npmmirror.com

3、全局安装

安装命令:npm i -g typescript

查看版本:tsc -v

四、初识ts

1、打开vscode编辑器,在你的目录下建立一个.ts为后缀名的文件

2、代码内容如下:

let str:string; //声明变量的类型
str = 'Hello,ts' //赋值的类型只能是上面定义的类型
console.log(str);

这个代码的意思是我们声明了一个str,并给他定义了字符串类型,紧接着我们又给他赋值

但是我们赋值的内容只能是我们上面给str定义的类型,也就是字符串类型。最后打印str

3、运行

(1)首先我们要打开当前文件下的终端

(2)然后编译文件,在终端输入命令:tsc xxx.ts,xxx为你创建的ts的文件名

(3)执行js文件,node xxx.js,xxx与上面一样

我们就可以看到代码结果了

五、TypeScript类型声明

5.1 基础类型

1、any

声明为 any 的变量可以赋予任意类型的值(字符串、数字、布尔值等等都可以)。​​​​

let str:any;//任意类型
str = 123
str = '456'
str = true
console.log(str);

我们通过打印看一下结果,结果为我们最后一次赋的值。

2、number数字类型 

双精度 64 位浮点值。它可以用来表示整数和分数。

let age:number;
age = 15
console.log(age);

这个就很好理解了,数字嘛,js就学过

3 string字符串类型 

字符串类型,用单引号、双引号、模板字符串(反引号)定义的文本。

let realname:string;
realname=`我的姓名是`+'枕头睡不醒'
console.log(realname);

4 boolean布尔类型 

表示逻辑值:true 和 false。

5 数组类型

数组类型就有点不一样了,可以仔细看一下

(1)在类型后面加[ ]数组里面是字符串

let realname:string[];
realname = ['枕头睡不醒','枕头睡不着','大耳朵图图']
console.log(realname);

 (2)使用范类型Array

这里的意思就是首先是数组类型后面加了一个尖括号,里面写了any就代表里面的值可以是任意类型

let persons:Array<any>;
persons=['枕头睡不醒',18]
console.log(persons);

 

6 元组类型

元组类型用来表示已知元素数量类型的数组,各元素的类型不必相同,对应位置的类型需要相同。

let zs:[string,number,number];
zs = ['张三',14,18]
console.log(zs);

7 enum枚举类型

枚举类型用于定义数值集合

什么意思呢,我们直接看代码嘿嘿嘿

enum days{Sun, Mon, Tue, Wed, Thu, Fri, Sat}
console.log(days.Sun);
console.log(days.Mon);
console.log(days.Tue);
console.log(days.Wed);

看到这里大家是不是很奇怪,为什么打印出来的是数字,其实他是数字枚举如果没有初始化,默认初始化值0,之后每项+1 ,所以才是这个结果,

那如果有初始化值呢?

enum days{Sun, Mon=10, Tue, Wed, Thu, Fri, Sat}
console.log(days.Sun);
console.log(days.Mon);
console.log(days.Tue);
console.log(days.Wed);

 如果有初始化,则在初始化值的基础上,每项+1,只要不是第一个值,那么第一个值还是从0开始。

总结:

数字枚举如果没有初始化默认初始化值为0每项+1

如果有初始化,则在初始化值的基础上,每项+1

还有就是不要再语法中给上面的属性赋值,会导致错误滴。

8 void无任何类型

void用于标识方法返回值的类型,表示该方法没有返回值。

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null;

声明一个方法,没有返回值:

function say():void{console.log('hello,ts!')
}
say()

9 null类型

这个就不用多介绍了,js中经常看到的,表示对象值缺失。

10 undefined类型

这个也是老熟人了,初始化变量但未定义值。

let realname
console.log(realname);

11 never类型

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。

比如函数抛出一个异常:

function hello(str:string):never{throw new Error(str);
}

12 unknown类型

unknown未知类型 自己可以赋值任意类型,但是不可以赋值给别人,

在这里我们会提到一个叫类型断言,什么意思呢?来,直接看代码

let realname:unknown;
realname ="张三"
realname =19

类型断言,因为我前面是 unknown类型,我不知道他说啥类型,所以我在后面复制的时候直接给他加上一个类型。一共有两种写法呦

写法一:

let realname:unknown;
realname ="张三"
str = realname as string //类型断言 断言他是字符串
console.log(realname);

写法二:

let realname:unknown;
realname ="张三"
str = <string>realname;
console.log(realname)

总结:

类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。

13 函数类型

function sum(a:number,b:number):number{return a+b
}console.log(sum(1,2));

这里要注意,我们定义的值a和b都是number类型,所以我们返回的也必须是number类型

14 对象类型 

(1)最简单的,这个其实没啥用哈

let p:object;
p={realname:'张三',age:18
}

(2)各个属性限制"死"

let P1:{realname:string,age:number}//定义类型
P1 = {realname:"张三",age:19} //赋值需要上面定义保持一致

(3)上面这个我的属性的类型都限制死了,那么就必须传值,那如果我不想给其中的一个传值呢?那就需要借助这个了,对就是问号

let p:{realname:string,age?};
p={realname:'张三'}

看,结果也不会报错 ,就非常的"神奇"

还有一种情况,就是我们属性名不确定的时候,这个也有解决办法滴

let p:{realname:string,[propName:string]:any}
p={realname:'张三'}
P = {realname:"张三",age:19}

当属性名不确定时,定义 propName,这个propName是随便定义的,大家喜欢就行,但是最好语义化,any就是类型啦

15 类型的别名

说道现在了,就会有人好奇,拿我可不可以自定义类型的别名呢,当然也是可以的,我们需要用到type

type mytype = string
let a:mytype;
a='123' //error

16 箭头函数

可以定义格式(其实就是定义了我们下面用到的函数格式)

let sum:(a:number,b:number)=>number;
sum = function(a:number,b:number):number{return a+b
}console.log(sum(1,2));

 六、变量声明

1 命名规则

var [变量名] : [类型] = 值;

例:let str:string = "hello";

(1)变量名称可以包含数字和字母。

(2)除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。

(3)变量名不能以数字开头。

(4)变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名。

2 声明未设置

var [变量名] : [类型];

声明变量的类型,但没有初始值,变量值会设置为 undefined;

3 声明未设置类型

var [变量名] = 值;

声明变量并初始值,但不设置类型,该变量可以是任意类型:

七、字面量声明

看三个例子

let a:100a=100 let sex:"男"|"女"
sex="男"let flag:boolean |string
flag=true

第一个定义了a 后面直接类似于赋值,它只能是100,其他都不行

第二个定义了sex 里面有两个值,男或者女中间是竖杠代表着或,也就是只能是男或者女

第三个和第二个差不多,d定义了布尔类型,那么他们只能是ture或者false

今天的分享就到此结束啦,要加油啊,冲冲冲。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java8 函数式编程【基础篇】

Java 8是Java在保持向后兼容的前提下首次迈出重要一步&#xff0c;相比之前&#xff0c;不再是只对类库的改良&#xff0c;在编写复杂的集合处理、并行化执行、代码简洁度等方面都有颠覆性的提升。本文将探索和理解函数式编程的含义&#xff0c;以及它在Java 8中的实现。 一、…

全光谱台灯对孩子有伤害吗?儿童用台灯的好处和坏处是什么

全光谱台灯是指灯光色谱丰富度与太阳光一般全面的台灯&#xff0c;这样的灯光照射下的任何物体&#xff0c;不但颜色丰富多彩&#xff0c;而且极其真实&#xff0c;无限接近太阳光下的真实色彩&#xff0c;对人眼舒适度有巨大的提升&#xff0c;所以全光谱台灯不但对孩子无害&a…

【文件I/O】标准IO:库函数

标准IO&#xff1a;库函数一、基本概念1.文件类型2.标准I/O介绍3.流的概念4.文本流和二进制流5.流的缓冲类型6.标准I/O流&#xff08;stdin、stdout、stderr&#xff09;二、标准I/O函数1.fopen、fclose、errrno、strerror、perror&#xff08;打开、关闭文件&#xff0c;输出错…

小程序开发音视频问题汇总及解决方案

目录 问题一&#xff1a;开发音视频&#xff0c;必用的两个小程序组件live-player和live-pusher&#xff0c;他们做什么用的&#xff0c;怎么才能使用&#xff1f; 问题二&#xff1a;一个页面只能插入一个 问题三&#xff1a;真机调试图片预览及视频全屏无反应 问题四&am…

在vue项目中下载swiper出现:Do not use ‘new’ for side effects报错问题

我报错的情况是&#xff1a;我在单文件组件vue文件中使用new Swiper&#xff0c;报了两个错误&#xff0c;图示&#xff1a; 第一个错误是&#xff1a;‘Swiper’ is not defined 第二个错误是&#xff1a;Do not use ‘new’ for side effects 解决办法&#xff1a; &#x…

5G无线技术基础自学系列 | MU-MIMO原理

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 MU-MIMO是指多个用户在上下行数据传输时…

【Linux】命令

常用命令 帮助&#xff08;Manual Pages&#xff0c;Manual&#xff1a;手册&#xff0c;特指参考文件&#xff09; man man <command_name> 打开目录&#xff08;change directory&#xff09; cd /etc/ cd /home 查看当前所在目录 pwd 创建一个名为 file 的文件&…

[附源码]计算机毕业设计JAVA校园共享单车系统

[附源码]计算机毕业设计JAVA校园共享单车系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

二、【React拓展】懒加载 lazy

文章目录1、适用点2、汇总1、适用点 懒加载往往配合路由一起使用&#xff0c;此处修改的项目是 二、【React-Router5】路由的基本使用 中的项目 首先从react中引入lazy import { lazy } from react 修改引入路由组件的写法 // import About from ./pages/About // import Home…

SequoiaDB湖仓一体分布式数据库2022.11月刊

本月看点速览 产品能力再获认可&#xff0c;入围多个榜单、报告 ‍精彩亮相2022沙丘大会湖仓一体专场 实力吸睛&#xff0c;获多家权威媒体关注与报道 生态圈不断扩大&#xff0c;与6家合作伙伴完成互认证 青杉计划2023进行中&#xff0c;一起攀登更高的“杉” 产品能力再获…

pip 安装 livetest 失败

pip 安装 livetest 失败1. 现象2. 解决方案(1) 下载(2) 移动并解压(3) 修改文件1) livetest-0.5/livetest/__init__.py2) livetest-0.5/setup.py3) livetest-0.5/test/test_select.py(4) 运行安装4. 验证1. 现象 pip 安装 livetest 失败 2. 解决方案 (1) 下载 官网下载 liv…

09-13-Hbase-shell入门操作

09-Hbase-shell入门操作&#xff1a; HBase Shell 操作 DDL基本操作 1&#xff0e;进入 HBase 客户端命令行 [roothadoop102 hbase-1.3.1]# bin/hbase shell 2&#xff0e;查看帮助命令 hbase(main):001:0> help 3&#xff0e;查看当前数据库中有哪些表 hbase(main):0…

网页添加灰色滤镜

网页添加灰色滤镜 b站的灰色滤镜 我校的灰色滤镜 CSDN的灰色滤镜 自己调制css主题,给网页加上滤镜. 更快捷的,可以在可以调制css的浏览器插件中加上滤镜,只要开启插件就会自动修改网站滤镜 以darkreader为例打开其开发者工具 *INVERT .jfk-bubble.gtx-bubble .captcheck_a…

ABAP CLEAR REFRESH FREE 说明(刘欣)

本文仔细测试总结了ABAP中的clear、refresh、free&#xff0c;因为很多时候程序的BUG就是出现在变量没有清理干净&#xff0c;希望整理一个定式出来以后少出BUG。 用clear、refresh、free对带表头的表执行的测试结果如下表&#xff1a; 看起来&#xff0c;最好的避免这些清空命…

总结:SpringBoot内嵌Tomcat原理

一、介绍 一般我们启动web服务都需要单独的去安装tomcat&#xff0c;而Springboot自身却直接整合了Tomcat&#xff0c;什么原理呢&#xff1f; 二、原理 SpringBoot应用只需要引入spring-boot-starter-web中这个依赖&#xff0c;应用程序就默认引入了tomcat依赖&#xff0c;其…

C语言——malloc开辟矩阵

目录 用动态内存开辟矩阵 矩阵初始化 用动态内存开辟矩阵 动态内存更多的知识在这篇博客&#xff0c;本文将介绍用malloc开辟矩阵。 malloc是C语言中用来动态开辟内存的&#xff0c;通过malloc函数可以向计算机申请一串连续的内存空间。 因为malloc开辟的内存在堆上&#…

Observability:从零开始创建 Java 微服务并监控它 (二)

这篇文章是继上一篇文章 “Observability&#xff1a;从零开始创建 Java 微服务并监控它 &#xff08;一&#xff09;” 的续篇。在上一篇文章中&#xff0c;我们讲述了如何创建一个 Java web 应用&#xff0c;并使用 Filebeat 来收集应用所生成的日志。在今天的文章中&#xf…

uni-app 超详细教程(三)(从菜鸟到大佬)

本文中内容为&#xff1a; 1. 支付功能&#xff08;微信支付&#xff0c;支付宝支付&#xff09; 2. 项目打包&#xff1a;&#xff08;APP打包&#xff0c;H5打包&#xff0c;微信小程序打包&#xff09; 一&#xff0c;uni - app 的支付功能 一、微信支付 1、登录微信开…

华为云数据库GaussDB(for Cassandra)揭秘:高性能低成本是什么样的体验?

在我们的日常理念中&#xff0c;追求性价比是最为常见的&#xff0c;但是你知道购买低配置还能享受高性能、低延时、超低价的数据库有哪些吗&#xff1f;今天我们就用数据说话&#xff0c;带你深入了解GaussDB(for Cassandra)挑战高性价比&#xff01; 众所周知&#xff0c;有…

操作系统实验5:信号量的实现与应用

写在最前的总结 下面的实验内容是在完整做完实验时候补充的&#xff0c;这里先把踩过的坑记录一下。 调试总结 先在Ubuntu上模拟生产者—消费者问题。这个实验分为两大部分&#xff0c;一个是实现信号量&#xff0c;另一个是验证信号量。对于第二个&#xff0c;建议先在Ubun…