首页 > 其他分享 >04-TS

04-TS

时间:2024-03-13 09:34:11浏览次数:20  
标签:string 04 TS number let 类型 name

简介

TypeScript是JavaScript的超集(继承了JS的全部语法),TypeScript = Type + JavaScript

简单来说, 就是在JS的基础上,为JS添加了类型支持。

TS是微软开发的开源编程语言,可以在任何运行JS的地方运行。

let uname: string = 'tom';  
let count: number = 10;

类型注解:指在变量、函数定义的时候,使用特定语法(:type)来指定其类型,并在代码中限制只能接收特定类型的值

  • JS和TS的区别

image.png

但是浏览器不能直接使用TS,需要编译为JS运行。

安装TS编译器:

npm install -g typescript

编译ts:

tsc demo.ts

但是默认编译版本为es3(比较低),编译出的js文件使用的是过时的var:

//编译后的js文件
var uname = 'tom';  
var count = 10;  
console.log("uname:".concat(uname, " --- count:").concat(count));

可以通过参数 -target指定编译时的目标版本,如:es6、esnext等

//编译后的js文件
let uname = 'tom';  
let count = 10;  
console.log(`uname:${uname} --- count:${count}`);

实际上就是将类型参数去掉了

常见类型

TS中除了JS的数据类型之外,还提供了新的实用数据类型:

image.png

基础类型

  • 基础类型

string、number、boolean、null/undefined、any、number[]/Array<number>

image.png

原则上不推荐any,这会让TypeScript失去类型保护的优势,等同于JavaScript

联合类型

  • 如果数组中有number类型,string类型,可以使用联合类型指定

联合类型是指由多个类型组成的类型,可以是多个类型的其中任意一种。

写法:类型1 | 类型2

//建议使用(|)
let arr1: (number | string)[] = ['d','e','f',4,5,6];  
let flag: (boolean | number) = true;  
flag = 0;  
flag = 1;  
flag = false;
  • 类型别名:相当于一种自定义类型,为任意类型起别名

使用场景:当同一个联合类型多次使用的时候,可以通过类型别名,简化该类型的书写

语法:

type customType = 指定类型
//多次使用
let arr3: (number | string)[] = ['a','b','c',1,2,3];  
let arr4: (number | string)[] = ['d','e','f',4,5,6];  

//指定类型
type numStrArr = (number | string)[];  
  
let arr5:numStrArr = ['g','h','i',7,8,9];  
  
console.log(`${arr3}\n${arr4}\n${arr5}`)

函数类型

函数类型实际上指的是:函数的参数及返回值的类型

//具名函数  
function add(x: number,y: number): number{  
    return x + y;  
}  
  
//匿名函数  
let add2 = function (x: number,y: number) : number{  
    return x + y;  
}  
  
//箭头函数  
let add3 = (x: number,y: number) : number => {  
    return x + y;  
}

//箭头函数
let add4: (x:number)=> number = (x) => {  
    return x + 1;  
}

如果函数没有返回值,则是 : void

注意:与JS不同的是,TS中函数调用时的实际入参和定义时的形式入参必须保持个数一致

  • 可选参数:TS中可以使用?实现可选参数的功能,可选参数只能出现在参数列表的最后
let getFullName = (firstName: string,lastName?: string):string => {  
    if (lastName){  //隐含的Boolean(),空字符串/null/undefined/0/NaN均为false
       return firstName + ' ' + lastName;  
    }  
    return firstName;  
}

对象类型

对象类型用来描述对象对应的结构,即有什么类型的属性和方法

JS中的对象:

const stu = {  
    name : 'Rose',  
    age : 18,  
    say(){   //对象中可以省略: function
       console.log(this.name + 'say Hello TS');  
    }  
}

TS中的对象类型:

const stu: {name: string,age: number,say(): void} = {  
    name : 'Rose',  
    age : 18,  
    say(){  
       console.log(this.name + 'say Hello TS');  
    }  
}
  • 使用{}描述对象的结构,属性采用 属性名:类型 的形式,方法采用 方法名():返回值类型 的形式。

  • 如果方法有参数,就在方法名后的小括号内指定参数的类型: say(content: string): void

  • 在一行中指定多个属性时,可以用 ,/; 分割

  • 方法的类型也可以使用箭头函数的形式

const stu: {name: string, age: number, say:(content: string) => void} = {  
    name : 'Rose',  
    age : 18,  
    say(content){  
       console.log(this.name + 'say Hello TS');  
    }  
}
  • 对象的属性/方法如果是可选的,使用 ? 声明

接口

当一个对象类型被多次使用的时候,可以使用 接口 interface 描述对象的类型,达到 复用

//interface描述对象类型
interface User{  
    name : string,  
    age : number,  
    say?(): void  
}

//复用interface声明的类型
const user1: User = {  
    name : 'Rose',  
    age : 18,  
    say(){  
       console.log(this.name)  
    }  
}
  • 接口中使用 interface 关键字声明,接口名称可以是任意合法的变量名称

  • 接口中定义的属性和方法,结尾使用 ,/; 分割,如果一行只有一个属性,后面也可以不写分号

type声明的类型别名也可以为对象指定类型:

type userType = {  
    name: string,  
    age?: number,  
    say(): void  
}  
  
let userByType:userType = {  
    name: 'zhangsan',  
    say() {  
       console.log('Hello TS')  
    }  
}
  • 相同点:都可以给对象指定类型

  • 不同点:

  1. interface只能为对象指定类型
  2. type可以为任意类型指定别名

类型推论

  • 在TS中,有些没有明确指出类型的地方,类型推论会帮助提供类型

  • 由于类型推论的存在,在某些地方,类型注解可以省略

  • 常见场景:

  1. 声明变量并初始化

  2. 决定函数返回值时

image.png

image.png

泛型

泛型函数

	//<T> 声明泛型方法
	function add<T>(a:T,b:T): T{
		return a + b;
	}

调用泛型方法:

add<number>(1,2);

add<string>(1,2);

标签:string,04,TS,number,let,类型,name
From: https://www.cnblogs.com/euneirophran/p/18069884

相关文章

  • Ubuntu 20.04 部署 MinIO
    MinIO是一款基于ApacheLicensev2.0开源协议的分布式文件系统(或者叫对象存储服务),可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现,服务端可以工作在Windows、Linux、OSX和FreeBSD上。配置简单,基本是复制可执行程序,单行命令就可以运行起来。M......
  • Qt QTextStream 类(文本流)和 QDataStream 类(数据流)
    一、二者区别(1)QTextStream类:用于对数据进行文本格式的读/写操作,可在QString、QIODevice或QByteArray上运行,比如把数据输出到QString、QIODevice或QByteArray对象上,或进行相反的操作。(2)QDataStream类:用于对数据进行二进制格式的读/写操作,QDataStream只可在QIOD......
  • 数据可视化-ECharts Html项目实战(1)
     在之前的文章中,我们学习了如何安装VisualStudioCode并下载插件,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。安装VisualStudioCodehttps://blog.csdn.net/qq_49513817/article/details/136442924?spm=10......
  • Oracle传送表空间(XTTS)
    传送表空间的限制条件:1、源数据库和目标数据库必须具有相同的字符集;                    2、与传送数据库不同,传送表空间源数据库服务器和目标数据库服务器可以属于不同的endian架构;                ......
  • ArkTs 网络请求注意事项
    此篇以对操作mysql为例情景一 post请求传递数据importhttpfrom'@ohos.net.http';lethttpRequest=http.createHttp();//用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息//从API8开始,使用on('headersReceive',Callback)替代on('headerR......
  • 中考英语首字母快速突破004-2021上海虹口英语二模-Exploring Fun Career Options for
    PDF格式公众号回复关键字:ZKSZM004原文​Withequalopportunities,womenareabletochoosetheirownidealjobs.Ifa9to5officejobisn'tyourstyle,considerthefollowingf(71)funjobsavailable.​Wedding(婚礼)planner​Whilesom......
  • abc204D 双烤箱烹饪的最短时间
    需要烹饪n道菜,第i道菜耗时t[i],有两个相同的烤箱,一个烤箱同一时间只能烹饪同一道菜。求烹饪完所有菜所需的最短时间?1<=n<=100,1<=t[i]<=100001背包变形,需要选出部分菜用烤箱1,其他用烤箱2,两者的最大值为结果,取所有可能的结果的最小值,即为答案。这里dp[i]表示总耗时为i的方案是否......
  • 手写解复用(一):TS解析
    1、本文的基本作用:引导理解封装格式,但更重要的是要自己去阅读协议,上手实践;2、本文的最大价值:久之,皆已遗忘;顾之,皆已忆起。一、基本知识1、TSHeader2、PAT3、PMT二、重点代码1、解析TSHeaderTS码流一般为188个字节为一包,以同步字节0x47开头,头上有4个字节,按上面格式......
  • L1-046 整除光棍
    模拟竖式除法。最好在纸上写一写,111/13,1111/13,1111/13。每次结果的余数后面加一个1就相当于是在被除数后面加了一个1.还有,a数组要开的足够大。#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,single=1; cin>>n; intcnt=1;//1有多少位 while(single<......
  • L1-043 阅览室
    不知道出题人是不是有那个大病。应该是测试点1,如果多次借,按照最后一次,多次还,按第一次。注意四舍五入。还有就是getchar()把空格读了。还有时间全换成了分钟60*小时+分钟。#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta[1003][10]; fill(a[0],a[0]+1003......