Vue3+TypeScript从入门到精通系列之:泛型接口

一、TypeScript的泛型接口代码


//泛型接口:在定义接口时,为接口中的属性或方法定义泛型类型,在使用接口时,再指定具体宕泛型类型
(() => {

//定义一个泛型接口
interface IBaseCRUD<T>{
  data: Array<T>
  add: (t: T) => T
  getUserId: (id: number) => T
}

//定义一个类,用来存储用户的相关信息(id,名字,年龄)
class User{
  id?: number //用户id?代表属性可有可无
  name: string
  age: number

  constructor(name: string,age: number){
      this.name = name
      this.age = age
    }
}

class UserCRUD implements IBaseCRUD<User>{
  data: Array<User> = []

  add(user: User): User {
    user.id = Date.now() + Math.random()
    this.data.push(user)
    return user
  }

  getUserId(id: number): User{
    return this.data.find(user => user.id === id)
  }

}


//实例化添加用户信息对象的类UserCRUD
const userCRUD: UserCRUD = new UserCRUD()
//调用添加数据的方法
userCRUD.add(new User("犬夜叉",23))
userCRUD.add(new User("小南",15))



const { id } = userCRUD.add(new User("杀生丸",26))
userCRUD.add(new User("佐助",13))
console.log(userCRUD.data)

const user = userCRUD.getUserId(id)
console.log(user)


})()

二、TypeScript的泛型接口代码转化为js代码

 tsc ./泛型接口.ts -t es6

泛型接口.js的代码如下所示:

//泛型接口:在定义接口时,为接口中的属性或方法定义泛型类型,在使用接口时,再指定具体宕泛型类型
(() => {
    //定义一个类,用来存储用户的相关信息(id,名字,年龄)
    class User {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
    }
    class UserCRUD {
        constructor() {
            this.data = [];
        }
        add(user) {
            user.id = Date.now() + Math.random();
            this.data.push(user);
            return user;
        }
        getUserId(id) {
            return this.data.find(user => user.id === id);
        }
    }
    //实例化添加用户信息对象的类UserCRUD
    const userCRUD = new UserCRUD();
    //调用添加数据的方法
    userCRUD.add(new User("犬夜叉", 23));
    userCRUD.add(new User("小南", 15));
    const { id } = userCRUD.add(new User("杀生丸", 26));
    userCRUD.add(new User("佐助", 13));
    console.log(userCRUD.data);
    const user = userCRUD.getUserId(id);
    console.log(user);
})();

三、泛型接口.js输出如下所示

node ./泛型接口.js
[
  User { name: '犬夜叉', age: 23, id: 1644674548832.4097 },
  User { name: '小南', age: 15, id: 1644674548832.0474 },
  User { name: '杀生丸', age: 26, id: 1644674548832.2822 },
  User { name: '佐助', age: 13, id: 1644674548832.5369 }
]
User { name: '杀生丸', age: 26, id: 1644674548832.2822 }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最笨的羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值