typescript 函数泛型-面试官:谈谈你对 TypeScript 中基类的理解? 应用场景?

2024-02-10 0 6,886 百度已收录

当使用子类声明一个类时,它可以作用于类本身,也可以作用于类的成员函数。

下面是一个具有相同类型元素的栈结构的简单实现,如下所示:

class Stack {
    private arr: T[] = []

    public push(item: T) {
        this.arr.push(item)
    }

    public pop() {
        this.arr.pop()
    }
}

如何使用它:

const stack = new Stacn<number>()

如果上面只能传递字符串和数字类型,那么可以使用猜测“约束类库”的方法,如下所示:

除了上述方法之外,泛型更多的中间用途如下:

例如,我们要设计一个函数,它接受两个参数,一个参数是对象,另一个参数是对象上的属性。 我们通过这两个参数返回该属性的值。

此时基类的索引类型和约束类型被设计为联合实现。

索引类型、约束类型

索引类型keyof T取出传入对象的属性类型,生成联合类型。 这里的子类U被约束为这个联合类型,如下所示:

function getValue<T extends objectU extends keyof T>(obj: T, key: U{
  return obj[key] // ok
}

上面之所以需要使用类库约束而不是直接将第一个参数定义为对象类型是因为默认情况下object指的是{},而我们接收到的对象是多种多样的。 类库代表传入的Object类型typescript 函数泛型typescript 函数泛型,如T extends object

使用如下图:

多种类型约束

例如,需要实现两个套接字的类型约束,如下所示:

interface FirstInterface {
  doSomething(): number
}

interface SecondInterface {
  doSomethingElse(): string
}

可以创建一个socket来继承上面两个socket,如下:

interface ChildInterface extends FirstInterface, SecondInterface {

}

正确的使用方法如下:

class Demo<T extends ChildInterface> {
  private genericProperty: T

  constructor(genericProperty: T) {
    this.genericProperty = genericProperty
  }
  useT() {
    this.genericProperty.doSomething()
    this.genericProperty.doSomethingElse()
  }
}

通过形式参数约束可以达到多类型约束的目的。

3、应用场景

通过上面的初步了解,后面会提到,在编译TypeScript的时候,定义函数、接口或者类的时候,并不是提前定义具体的类型,而是在使用的时候,指定该类型的一个特性。 ,在这种情况下你可以使用类库

灵活使用类库定义类型是掌握TypeScript的必由之路

参考

- 结束 -

系列更新中:7/12

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 typescript typescript 函数泛型-面试官:谈谈你对 TypeScript 中基类的理解? 应用场景? https://www.wkzy.net/game/199920.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务