TypeScript开启

news2025/1/21 12:57:19

TypeScript是什么?

typescript是以JavaScript为基础构建的语言,是一个Javascript的超集,可以在任何支持JavaScript的平台中执行,typescript扩展了JavaScript,并添加了类型。
注意:ts不能被js直接解析执行,需要经过编译为js执行类似于less这种预处理语言。

typescript增加了什么?

保持js原有类型的同时新增加了一些类型。
支持es的新特性。
添加了es不具备的新特性。
丰富的配置选项。

配置typescript开发环境:

1.下载安装node.js
2.使用npm全局安装typescript
进入命令行。
输入命令:npm i -g typescript
3.创建一个ts文件
4.使用tsc对ts文件进行编译。
进入命令行。
进入ts文件所在目录。
执行命令:tsc xxx.ts。
执行完上述操作之后会产生一个同名的js文件。
在这里插入图片描述

ts的基本类型

类型声明:

类型声明式ts非常重要的一个特点。通过类型声明可以指定ts中变量(参数、形参)的类型。
指定类型后,当为变量赋值时。ts编译器会自动检查是否符合类型声明,符合则赋值,否则报错。简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值。
语法:


```typescript
let 变量:类型
let 变量:类型 = 值;
function fn(参数:类型,参数:类型):类型{
	...
}```

console.log('Hello Typescript');
//先声明后赋值
let a: number;   //a的类型设置为number,在以后的使用过程中a的值只能是数字
a = 10;
a = 33
// a = 'abc' // 此行代码会报错,因为变量a的类型是number,不能赋值字符串。

let b: string;
b = 'abc';
b = 'def';
// b = 1 //此行代码会报错,因为变量b的类型是string,不能赋值数字。



//声明完直接赋值
// let c: boolean = true;

//如果变量的声明和赋值时同时进行的,ts可以自动对变量进行类型检测,一旦赋值完成变量的类型就已经确定了。
let c = true;
c = false;


//js函数中的参数是不考虑类型和个数的
// function sum(a, b){
//   return a + b;
// }
// console.log(sum(123,456))  //579
// console.log(sum('123','456')) //'123456'


//ts中函数传参时可以规定参数的类型,函数返回值的类型,只是在编写代码的阶段会进行报错的提示,编译还是可以进行的。
function sum(a:number, b:number):number{
  return a + b;
}
console.log(sum(123,456))

自动类型判断:

ts拥有自动的类型判断机制。
当对变量的声明和赋值时同时进行的,TS编译器会自动判断变量的类型。
所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明

类型:

类型例子描述
number1,-33,2.5任意数字
string“hi”,‘hi’,hi任意字符串
booleantrue、false布尔值true或false
字面量其本身限制变量的值就是该字面量的值
any*任意类型
unknow*类型安全的any
void空值(undefined)没有值(或undefined)
object{name:‘齐天大圣’}任意js对象
array[1,2,3]任意js数组
tuple[4,5]ts新增类型,固定长度数组
enumenum{A,B}枚举,ts中新增类型

这里在使用ts里的变量的时候,产生一个问题,同一个文件夹下(其实不同文件夹下也会产生这样的问题)的t不同s文件怎么会产生重名问题,是因为在一个没有任何设置的普通项目中,vscode编辑器会把当前打开的 ts 文件当作一个整体的作用域进行验证。解决办法是使用命令tsc init 去初始化ts工程,生成一个配置文件tsconfig.json。该文件内部主要有如下内容:
Created a new tsconfig.json with:

target: es2016
module: commonjs //采取文件模块,会在当前文件中创建一个本地作用域
strict: true
esModuleInterop: true
skipLibCheck: true
forceConsistentCasingInFileNames: true

类型使用实例如下:

//可以直接使用字面量来进行类型声明
let d: 10;

//可以使用 | 来连接多个类型(联合类型)
let e: 'male'| 'female';
e = 'female';
e = 'male';

let f: string | number;
f = 'abc';
f = 1

//any表示的是任意类型,当一个变量设置为any后相当于对该变量关闭了TS的类型检测。
//不建议使用any
//g的类型是any,它可以赋值给任意类型的变量
let g: any;  //显式any
// let g  //隐式any 即如果声明变量不指定类型,则ts解析器会自动判断变量的类型为any
g = 1;
g = 'abc';
g = true;

// unknown 表示未知类型的值  效果跟any是一样的
// unknow 实际上就是类型安全的any  该类型的变量不能直接赋值给其他变量
let h: unknown;
h = 1;
h = true;
h = 'abc';

let i:string;
// i = g;  //不报错
h = 'hello';
// i = h; //会报错  不能把uknow的值赋给h  
//改成这样则不会报错
// if(typeof h === 'string') {
//   i = h;
// }

// 类型断言 用来告诉解析器变量的实际类型
//语法:1.变量 as 类型
//      2.<类型>变量
i = h as string
i = <string> h

//void用来表示空,以函数为例,就表示没有返回值的函数
function fn():void {
  // return undefined;
  // return null;这两个返回值都为空。 或者只写或不写return都不会报错。
}

//never表示永远不会返回结果
function fn2():never {
  throw new Error("报错了");
}

//对象的类型声明
//object表示一个js对象  用的较少 js中一切皆对象 一般限制 我们是想限制对象里边包含有哪些属性
let j: object;
j = {};
j = function(){};
//{}用来指定对象中可以包含哪些属性
//语法:{属性名:属性值,属性名:属性值}
//在属性名后边加上?表示属性是可选的 否则必须包含这几个属性而且未指定的属性不能出现 否则会报错 
let k:{name: string,age?: 20};
k = {name: 'abc',age: 20}
//如果我们想要实现一个 一定包含name属性,其他属性随意的对象
// [propName:string]:any  表示任意类型的属性
let l:{name:string,[propName:string]:any}

l = {name:'zs',age:18,id:8888}


//这样写意义不大
// let m:Function;
//设置函数结构的类型声明
//语法:(形参:类型,形参:类型...)=>返回值
let m:(a:number,b:number)=>number
m = function(a1,a2){
  return a1 + a2
}

//数组的类型声明
//n:string[]表示一个字符串数组
let n:string[];

let o:number[]; //这个表示数值数组

let p:Array<string> //也表示字符型数组


// 元组:元组就是固定长度的数组
//语法:[类型,类型,类型]
let q:[string,number];
q = ['abc',123];

//enum枚举
enum Gender{
  male,
  female
}
let r: {name:string,sex:Gender}
r = {name:'LiHua',sex:Gender.male}

console.log(r.sex === Gender.male)


//&表示同时
let s:{name:string} & {age:number};  //s必须满足这两个对象


//类型的别名
type myType = string  //给string类型起个别名为mytype,但这样用没有意义,所以在下列情况,我们使用类型别名来简化代码
type myType1 = 1 | 2 | 3 | 4 | 5
let t: myType1;
let u: myType1;

TS编译选项

(1)tsc xxx.ts -w
这里的w是watch的意思,输入这样的命令之后,会帮助我们监视该ts文件,当该文件内容发生变化之后,会帮助我们在一定的时间间隔之后自动编译ts文件。
(2)ts配置文件
tsconfig.json是js编译器的配置文件,ts编译器可以根据它的信息对ts文件进行编译。

{
// include用来指定哪些ts文件需要编译
  // exclude用来指定哪些ts文件不需要编译
  // **表示任意目录   *表示任意文件
  "include": [
    "./**/*"
  ],
  "exclude": [
    //默认值
    // "node_modules","bowser_components","jspm_packages"
  ],
  "extends": "./xxx.json", //定义被继承的配置文件
  "files": [] ,// 要编译哪些文件直接罗列出来即可
  "compilerOptions": {
  	"strict": false, //所有严格检查的总开关 所有严格检查可以在这里统一控制 
  	"target": "ES5",   //编译后的js版本
  	"module": "ES2015",  //编译后的模块化规范
    "lib": [], //指定项目中使用的库
	"outDir": "./dist",
	"ourFile":"",  //将代码合并为一个文件
	"allowJs": false, //是否对js文件进行编译 默认不编译
	"checkJs": true,  //是否检查js代码语法符合规范
    "removeComments": false, //是否移除注释
    "noEmit": false, //不生成编译后的文件
    "noEmitOnError": false,  //当有错误时,不生成编译文件
    "alwaysStrict": false,  //用来设置编译后的代码是否使用严格模式
    "noImplicitAny": true, //不允许隐式的any类型
    "noImplicitThis": true, //不允许不明确类型的this
    "strictNullChecks": true, //严格的检查空值
  },


 }

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

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

相关文章

MySQL的join你真的了解吗!!!

1.测试用例数据库信息 本文章采用的数据库结构&#xff0c;以及MySQL版本&#xff1a;5.7 t1 表&#xff0c;有一个主键id&#xff0c;字段a&#xff0c;字段b。 &#xff08;此表建立了一个索引a&#xff09; 数据大约1000条 t2 表&#xff0c;有一个主键id&#xff0c;字段…

C++标准库分析总结(十一)——<适配器>

目录 1 适配器简介 2 适配器使用分类 2.1 容器适配器 2.2 函数适配器 2.2.1 常见的函数适配器 2.2.2 bind2nd 2.2.3 not1 2.2.4 新型适配器bind 2.3 迭代器适配器 2.3.1 reverse_iterator 2.3.2 insert_iterator 2.4 X适配器 2.4.1 ostream_iterator 2.4.2 istre…

BUUCTF-babyheap_0ctf_2017

checksec 标准堆菜单 IDA Allocate void __fastcall sub_D48(__int64 a1) {int i; // [rsp10h] [rbp-10h]int v2; // [rsp14h] [rbp-Ch]void *v3; // [rsp18h] [rbp-8h]for ( i 0; i < 15; i ){if ( !*(_DWORD *)(24LL * i a1) ){printf("Size: ");v2 sub_1…

【云原生】无VIP稳定性和可扩展性更强的k8s高可用方案讲解与实战操作

文章目录一、概述二、架构三、开始部署1&#xff09;节点信息2&#xff09;前期准备&#xff08;所有节点&#xff09;1、配置hosts2、配置互信3、时间同步4、关闭防火墙5、禁用SELinux6、关闭swap7、设置bridge-nf-call-iptables3&#xff09;安装容器docker&#xff08;所有节…

C++标准库分析总结(十)——<仿函数/函数对象>

目录 1.functor仿函数简介 2 仿函数的分类 3 仿函数使用 4 仿函数可适配的条件 1.functor仿函数简介 仿函数是STL中最简单的部分&#xff0c;存在的本质就是为STL算法部分服务的&#xff0c;一般不单独使用。仿函数&#xff08;functors&#xff09;又称为函数对象&…

Windows 命令行cmd.exe简单介绍

介绍&#xff1a; 在windows系统中&#xff0c;Windows命令shell&#xff08;cmd.exe&#xff09;,在 SystemRoot/System32目录下。 启动命令行&#xff0c;在"开始"——>"搜索"中输入cmd&#xff0c;此时命令行展示当前工作目录&#xff0c;默认为/u…

JS(第二十四课)JS高级Es6语法

ECMAScript 6_百度百科 (baidu.com) 第一部分:百度简介 ECMAScript 6&#xff08;简称ES6&#xff09;是于2015年6月正式发布的JavaScript语言的标准&#xff0c;正式名为ECMAScript 2015&#xff08;ES2015&#xff09;。它的目标是使得JavaScript语言可以用来编写复杂的大型…

mybatis 01: 静态代理 + jdk动态代理 + cglib动态代理

背景 有时目标对象不可直接访问&#xff0c;只能通过代理对象访问 图示&#xff1a; 示例1&#xff1a; 房东 > 目标对象房屋中介 > 代理对象你&#xff0c;我 > 客户端对象示例2&#xff1a; 运营商(电信&#xff0c;移动&#xff0c;联通) > 目标对象第三方公司…

(Java)P1223 排队接水

排队接水 一、 题目描述 有 nnn 个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为 TiT_iTi​&#xff0c;请编程找出这 nnn 个人排队的一种顺序&#xff0c;使得 nnn 个人的平均等待时间最小。 二、输入格式 第一行为一个整数 nnn。 第二行 nnn 个整数&…

Linux下加密库Libsodium 使用实践(ip监听、封装的加密消息、运行系统命令)

Libsodium 是一个用C语言编写的库&#xff0c;是一种新的易于使用的高速软件库&#xff0c;用于网络通信、加密、解密、签名等实现和简化密码学。 完成 Libsodium 安装 Libsodium 是一个用于加密&#xff0c;解密&#xff0c;数字签名&#xff0c;密码哈希&#xff0c;等的&a…

java每日一练(4)

java每日一练(4) 文章目录单选部分不定项选择题多选题编程题单选部分 1.下列与队列结构有关联的是&#xff08;&#xff09; A 函数的递归调用   B 数组元素的引用   C 多重循环的执行   D 先到先服务的作业调度 队列的特点 &#xff1a; 先进先出 , 所以 答案非常明显 D  …

【python】通过gitlab v4版本api接口获取所有项目代码示例

目录一、环境信息二、参数说明三、脚本使用说明1. 使用python2运行git.py2. python脚本执行完毕会自动生成如下四个文件3. 其他脚本说明四、脚本源码1. git.py2. update.sh五、脚本扩展说明附录一、环境信息 脚本适用于&#xff1a;python2 测试版本&#xff1a;2.7.18 二、…

于我来说,赌才是世界杯的灵魂~

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 先看这里前言了解足球首看世界杯再看世界杯前言 身边朋友也有踢球的&#xff0c;但是不多。就两个&#xff0c;一个是我同学&#xff0c;一个是我同事…打篮球的倒是不少&#xff0c;猜想…

这五个适合上班族的副业你知道多少

第二职业赚钱的路子有什么&#xff1f;从理论上讲&#xff0c;第二职业就是一个创业的过程&#xff0c;也遵照自主创业一般规律。可是第二职业是在业余时间和没有灵活运用资源挣钱&#xff0c;和创业有所不同。第二职业门坎变低&#xff0c;更比较发达&#xff0c;因此今天小编…

Arduino--音乐频谱

本文主要介绍基于Arduino实现的音乐频谱显示&#xff0c;音乐频谱原理就是声音传感器&#xff08;MIC&#xff09;接收音频信号后通过FFT将时域信号转换成频域信号&#xff0c;再将音频信号频域分量分别显示在对应的LED点阵屏上&#xff0c;呈现出音乐随频律动的感觉&#xff0…

Windows Docker Desktop安装K8S

Docker DeskTop提供了K8S支撑&#xff0c;安装也较为简单。对于本地开发&#xff0c;测试部署项目较为方便。下面进行简单说明。 DockerDesktop配置镜像源&#xff0c;较为简单&#xff0c;有许多网上例子直接参考即可。启用K8S等待一阵子&#xff0c;K8S即可安装成功。可以看…

MySQL存储引擎介绍

首先 我们要知道 什么是引擎 我们常见的 客机 直升机 火箭等等 他们都有自己的引擎 引擎也就是指一个机器的核心 当然 你如果是一个飞机 那你自然是不能用火箭的引擎的 存储引擎就是存储数据 建立索引 更新/查询数据等技术的实现方式&#xff0c;存储引擎是基于表的&#xf…

TDK | CeraLink 电容器快速切换逆变器的革新

本周向大家介绍另一款压电技术的产品CeraLink。 CeraLink 是一系列非常紧凑的电容器&#xff0c;用于稳定直流链路中的电压。因此它们适合用作缓冲器或直流母线电容器。这些产品基于 PLZT 陶瓷&#xff0c;旨在为工程师提供针对快速开关转换器、空间要求非常紧凑的转换器和需要…

Java项目:饰品商城系统(java+SSM+JSP+javascript+jQuery+Mysql)

源码获取&#xff1a;俺的博客首页 "资源" 里下载&#xff01; 项目介绍 本项目分为前台与后台&#xff0c;有普通用户与管理员两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,一级分类管理,二级分类管理,饰品管理,订单管理、发货、…

Linux中对磁盘(硬盘)分区和挂载

记录&#xff1a;346 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用fdisk对磁盘分区&#xff1b;使用mkfs.xfs创建文件系统&#xff1b;使用mount挂载磁盘到目录&#xff1b;使用umount卸载目录已挂载的磁盘&#xff1b;修改文件系统表fstab&#xff0c;满足开机启…