泛型
泛型允许我们在定义函数、类或接⼝时,使⽤类型参数来表示未指定的类型,这些参数在具体 使⽤时,才被指定具体的类型,泛型能让同⼀段代码适⽤于多种类型,同时仍然保持类型的安全性
泛型函数
// 设置泛型使用<T>,T是自定义名称,在函数中使用T表示该类型
function user<T>(data:T):T{return data
}// 可以设置多个泛型,返回值可以是T或者U类型
function info<T,U>(a:T,b:U): T | U{return a
}// 设置泛型为string
user<string>("a")info<string,number>("a",1)
泛型接口
interface UserInterface<T>{name:T,age:number
}// 设置接口的T泛型为string
let user:UserInterface<string>user = {name:"1",age:2}
泛型约束
// 自定义一个接口,其中有name属性
interface UserInterface{name:string
}// 设置的泛型T继承自UserInterface接口, 即传入的类型T,必须具有name属性,且是string
function info<T extends UserInterface>(data:T):void{console.log(data.name)
}let user = {name:"1"}
info(user)
泛型类
class User<T>{constructor(public name:T) {}
}const user = new User<string>("1")
类型声明文件
类型声明⽂件是 TypeScript 中的⼀种特殊⽂件,通常以 .d.ts 作为扩展名。它的主要作⽤ 是为现有的 JavaScript 代码提供类型信息,使得 TypeScript 能够在使⽤这些 JavaScript 库 或模块时进⾏类型检查和提示
// js文件
// export用于将模块中的变量、函数、类等内容暴露(提供)给其他模块使用
// 这是现代 JavaScript 模块化编程的重要组成部分
// 它使得代码可以被组织成独立的模块,每个模块有自己的作用域,并且可以选择性地向外共享内容export function count(a,b){return a*b
}
// .d.ts文件// 使用declare声明的内容只是告诉 TypeScript 编译器某个变量、函数或模块的存在和结构,但不会在运行时产生实际的代码。
// 所以在运行时这些声明的内容确实存在,否则可能会导致运行时错误// 声明函数,告诉ts有这个函数
declare function count(a:number,b:number):numberdeclare function print(a:number,b:number):void// 将count,print暴露出去
export {count,print}
// ts文件// 导入b.d.ts中的count和print
import {count, print} from "./b";
count(1,2)