泛型
function join(a: string | number, b: string | number) {
return `${a}${b}`;
}
function join1<T>(a: T, b: T) {
return `${a}${b}`;
}
join1<string>("1", "2");
function map<T>(params: T[]) {
return params;
}
map<number>([123]);
function map1<T>(params: Array<T>) {
return params;
}
map1<number>([123]);
function join2<T, P>(a: T, b: P) {
return `${a}${b}`;
}
join2<number, string>(1, "1");
join2(1, "1");
function join3<T>(a: T, b: T): T {
return a;
}
类中泛型
class DataManager{
constructor(private data:string[]){}
getItem(index:number){
return this.data[index];
}
}
const datas = new DataManager(["1"]);
datas.getItem(1)
class DataManager1<T>{
constructor(private data:T[]){}
getItem(index:number){
return this.data[index];
}
}
const datas1 = new DataManager1<number>([1]);
datas1.getItem(1);
interface Item{
name:string
}
class DataManager2<T extends Item>{
constructor(private data:T[]){}
getItem(index:number):string{
return this.data[index].name
}
}
const data2 = new DataManager2([
{
name:"ting"
}
])
data2.getItem(1);
class DataManager3<T extends number | string>{
constructor(private data:T[]){}
getItem(index:number):T{
return this.data[index];
}
}
const datas3 = new DataManager1<number>([]);
const func5 :<T>() => string = <T>() =>{
return "123";
}
const func4 : <T>(param:T) => T = <T>(param:T) =>{
return param;
}
function hello4<T>(param:T):T{
return param;
}
const func6 : <T>(param:T) => T = hello4
泛型中的keyof
interface Person {
name: string;
age: number;
gender: string;
}
class Teacher {
constructor(private info: Person) {}
getInfo<T extends keyof Person>(key: T): Person[T] {
return this.info[key];
}
}
const teacher = new Teacher({
name: "tt",
age: 18,
gender: "male",
});
const test = teacher.getInfo("name");