目录
一、先来了解一下什么是TypeScript?
二、TypeScript有哪些特性与优势?
三、为什么说在TS中如果泛型排第二,那么接口一定排第一
四、TypeScript的用法
接口的定义:
函数类型的定义:
泛型的定义:
泛型约束的定义:extends
TypeScript(简称TS)是一种开源的编程语言,它是JavaScript的一个超集,由Microsoft开发和维护。TypeScript通过添加静态类型、类、接口、模块等新特性来扩展JavaScript,并在其基础上提供了更强大的工具和编译器功能。
具体而言,TypeScript提供了以下特性和优势:
静态类型检查:TypeScript引入了静态类型系统,在开发过程中可进行类型检查,捕获常见的错误和潜在的问题,减少运行时错误,并提供更可靠的代码提示和自动补全功能。
类和接口:TypeScript支持面向对象的编程,引入了类和接口的概念以及相关的特性,如封装、继承、多态等。这使得代码更易于组织、理解和维护,并提供了更高的可重用性和扩展性。
ES6+支持:TypeScript对ECMAScript(JavaScript的标准化版本)的最新特性提供了广泛的支持,例如箭头函数、模板字符串、解构赋值、Promise等。
模块化开发:TypeScript支持使用模块化进行代码组织,支持以ES6模块规范导入和导出模块,提供了更好的代码组织和可维护性。
编译时类型检查:TypeScript代码需要先经过编译器的转换,将TypeScript代码转换为纯JavaScript代码,这个过程中会进行严格的类型检查,捕获潜在的错误。这可以在开发过程中提前发现问题,并加快代码的执行速度。
总的来说,TypeScript提供了更强大的工具和类型检查,帮助开发人员编写更可靠、可维护和可扩展的前端代码。它与JavaScript的语法很接近,可以无缝迁移现有的JavaScript项目,并且在大型和复杂的项目中尤为有用。
在TypeScript中,当定义一个类型或者类时,可以使用接口(interfaces)和泛型(generics)来增加灵活性和可复用性。
接口用于定义对象的结构和行为,它可以描述一个对象应该具有的属性和方法。通过接口,可以约束一个对象的形状,使其符合特定的结构。
泛型用于在定义函数、类或接口时,可以在它们的内部使用指定类型的占位符,以后在实际使用时再指定具体的类型。泛型可以增加代码的复用性和灵活性,使代码可以适用于多种类型。
当一个接口需要使用泛型时,接口的定义中会包含泛型参数。这意味着,在使用这个接口时,必须同时指定泛型的具体类型。
通常情况下,将接口排在前面是因为接口定义了对象的结构和行为,更能直观地表达类型的要求。而泛型则属于更高级的特性,它可以为不同的类型提供通用的支持。因此,当需要同时使用接口和泛型时,通常将接口放在第一位,以提高代码的可读性和可理解性。
综上所述,将接口排在第一位,泛型排在第二位,是一种更常见和推荐的代码风格。但这并不是绝对的规定,实际使用时可以根据需求和个人偏好进行灵活调整。
使用:指定变量的类型,:的前后有没有空格都可以
window.onload=function(){
let flag:boolean=false; //布尔类型
let num:number=12; //数值类型
let str:string='abcd'; //字符串类型
let msg:string=`hello,${str},${num}`;
let u:undefined=undefined; //undefined类型
let n:null=null; //null类型
}
数组类型的定义。最简单的方法就是使用 [类型+方括号] 来表示数组。
let arr1:number[]=[1,2,3];
let items=["a","b","c"];
let arr2:string[]=items
存在多钟类型 联合类型
let arr3:(number | string)[]=[1,2,3,"1","2","3"];
let arr4:any[]=[1,2,3,"1","2","3"];
数组泛型
let arr5:Array=[1,2,3,"1","2","3"];
接口虽然和class(类)有点相同,类是声明并且实现方法,但是接口只声明成员方法,不做实现的。需要注意的是,一旦定义了任意属性,那么确定属性好可选属性都必须是它的子属性。
interface IPerson{
name:string; //确定属性
age?:number; //可选属性
[propName:string]:any; //任意属性
//需要注意的是,一旦定义了任意属性,那么确定属性好可选属性都必须是它的子属性。
}
let Ob:IPerson={
name:"xiaoming",
age:18,
weight:100
}
一个函数有输入和输出,要在TypeScript中对其进行约束,需要把输入和输出都考虑到。
function sum(x:number,y:number):number{
return x+y
}
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候在指定类型的一种特性。(可以实现公共复用)
function f1(a:T,b:T):T[]{
return [a,b] //当没有返回值时return,则把T[]改为viod
};
f1(1,2);
f1("hello","abcd");
f1(true,false);
对比以下的代码:
function f1(a:number,b:number):number[]{
return [a,b]
};
f1(1,2);
function f1(a:string,b:string):string[]{
return [a,b]
}
f1("hello","abcd");
function f1(a:boolean,b:boolean):boolean[]{
return [true,false]
}
interface ILength{
Length:number;
}
function f2(a:T):number{
return a.length //要求所有类型都有length属性(数组,字符串,对象)数字没有。
}
f2("hello")
//接口调用公共复用方法不仅仅针对于对象,输入和输出类型一样可以调用公共复用方法。
//泛型接口 复用输入和输出类型
interface IFn{
(a:string,b:string):boolean
//(a:T,b:T):T ;则需设置let fn1=function (x,y){
}
let fn1:IFn=function(x,y){
if(x>y){
return true
}else{
return false
}
};
fn1(100,200);
let fn2: IFn=function(s1,s2){
return s1===s2
};
fn2(a,b)
《到此结束,感谢列位收看》