还不学TypeScript?

文章介绍了TypeScript作为JavaScript的超集,如何通过强类型系统解决大型项目维护难题。讨论了基础数据类型如布尔、数字、字符串、数组、元组、枚举等,并强调了接口(Interface)在确定对象属性和类型中的作用。此外,还提到了泛型(Generics)在处理不确定类型的函数参数和返回值中的重要性。

前端小菜鸡,持续学习中。

TS是由微软推出的一款强类型语言,是JS语言的超集,并且最终会被编译成纯JavaScript。如图。

 由于JS是弱类型语言,定义变量后并不表明该变量属于何种数据类型,意味着变量类型可被随意更换,对于大型项目来说,维护困难,TS语言解决了这一问题,扩展了JS数据类型,并且引入了interfaces和generics的概念。但我觉得对于几百行代码来说,使用ts和js差别不大,选取对自身来说更熟练语言进行编写更好。下面一起来学习下ts基础。

基础数据类型

// ts支持几乎相同的所有js数据类型

// boolean 布尔类型
let bool:boolean = false;

// number 数字类型(除十进制和十六进制之外, ts支持ES2015中新增的二进制和八进制)
let num:number = 1;
let num2:number = 0xf00d;

// string 字符串类型
let str:string = '翠花在学习,路过点个赞';

// Array 数组 两种方式定义数组

// 第一种 变量名后边跟组成该数组元素的类型然后连接[]
let list: number[] = [1,2,3,4,5]; 
// 第二种 数组泛型
let list: Array<string> = ["1","2","3","4","5"];

// Tuple 元组(已知类型和数量的数组)
let tup: [boolean,string] = [true,"123"];

// Enum 枚举
enum Name {John, Amy, Sarah}
let c: Name = Name.John;

// Any 任意类型
let notSure: any = 4;
notSure = {id:1};

//Void 函数无返回值时可使用
function fun(): void {
    console.log("This guy doesn't have Value");
}

//Null和Undefined  用处不大
let u: undefined = undefined;
let n: null = null;

//Never 可用于抛出错误或死循环

// Object 非原始数据类型
let obj: object = {name:'龙江翠花'}


变量声明

let和const是JS在ES6之后引入的,但TS本身就支持let和const定义变量,不建议使用var会导致变量提升问题。

接口

interface是TS较之JS引入的重要概念之一,那么它的作用是什么呢?总而言之一句话,——就是确定值必须包含的属性以及这些属性的类型。对值进行类型检查也是TS的核心原则之一。

下面先用普通代码理解一下interface。

// 普通代码

function typeCheck(mustHave: { bool: boolean , name:string }):void {
    console.log(mustHave,"输出")
}

let obj = {beautiful:"yes",name:'龙江翠花请你点个赞',bool:false,}
typeCheck(obj);//  传入参数必须为对象且必须包含name是string类型和bool类型是boolean,

我们用Vscode运行一下这段代码,注意浏览器不识别TS代码,TS最终会被编译成JS文件。

用Vscode先全局安装一下TypeScript npm i typescript -g ,可以用tsc -v 查看一下是否安装成功。tsc --init生成tsconfig.json将输出文件改成.js就可以了。这里可以用Vscode下一个插件Code Runner帮助运行ts文件。

输出结果:

 我们用interface改写一下代码

//interface改写

interface must {
    bool: boolean, 
    name:string
 }
 function typeCheck(mustHave: must):void {
     console.log(mustHave,"输出")
 }
 let obj = {name:'龙江翠花请你点个赞',bool:true,}
 typeCheck(obj);

interface所规定的属性和类型是必须的,但是顺序可以随意。

理解了interface,再来学习一下它的几个写法。首先,传入值的属性可选且可以设置为只读。

对于readonly,也可以定义变量的时候使用,如 let a: readonly number[] =[1,2,3];   ,但此修饰符只可修饰数组和元组。 让我们想一想

const似乎和readonly有着相同的作用,那么这二者的使用场景分别是什么呢?官网给出的回答是

——该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用 const,若做为属性则使用readonly

其次可以定义函数传参类型以及确定返回值,如果不标返回值,类型检查会报错。

 泛型

generics的作用是啥呢?Let's think about it!

对于上述我们写过的函数,如果我们不能确定传入参数的类型呢,那么就可能定义为Any。返回值的类型也无法确定呢,也可能定义为Any。这样虽然可以解决,但是却失去了TS类型检查和保护这一重要原则。

泛型的可以很好的解决这一问题。

// 泛型用法
//class中使用
class People<type>{
    name:string;
    age:number;
    money: (yearMoney:type,num:type) => type;
}
let person = new People<number>();
person.money = function (yearMoney,num) {
    return yearMoney*num
}
person.name='龙江翠花';
person.age=18;
person.money(10000000000,12);
console.log(`这个人叫${person.name},年龄${person.age},
年薪${person.money(10000000000,12)}万`);

 

 以上仅对TS较之JS重点部分进行概述。

 OK,更多重点内容请关注TypeScript官网,路过点个赞呗。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值