gpt4 book ai didi

typescript - typescript 中的子类化

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:14 25 4
gpt4 key购买 nike

我在 Typescript 中有一个存储类,它实现了 Storage 接口(interface),比如 MyStorage。但是它的方法太多了,所以我想用它来代替MyStorage.getCandy——MyStorage.Candies.getCandies。结构可能看起来如何?

我想,像

export class MyStorage implements Storage {

public constructor {} ...

Candies: {
getCandies() { ... }
}

Balls: {
...
}
}

最佳答案

您应该考虑这么大的对象是否有意义。做所有事情的类通常不是一个好主意,您应该将它们分成几个类,每个类处理一个特定的对象类型(即一个类用于 Balls,一个类用于 Candies 等)并使用这些类。如果你想共享代码,你可以把它放在一个基类中(如果它没有具体的功能,最好是一个抽象基类)。解决方案可能如下所示:

export abstract class MyStorage implements Storage { 

}
export class CandiesStorage extends MyStorage {
getCandies() {}
}

export class BallsStorage extends MyStorage {
}

话虽这么说,如果由于您自己的原因这不可行,您可以这样拆分功能,您只是运算符错误,您需要用 初始化 Candies 字段>= 不是 : (: 是类型注释,不是类内部的字段初始化)。这种方法的一个问题是,如果您使用常规函数,在对象文字函数(例如 getCandies)内部,this 将引用对象文字。最简单的解决方案是使用箭头函数或添加额外的 owner 字段以允许访问包含的类实例。下面是一个解决方案,它举例说明了这两种选择:

export class MyStorage implements Storage {

public constructor (){ }

Candies = {
getCandies: () => {
this.Balls // this refers to MyStorage
}
}

Balls = {
owner: this, // capture the owner object in a field
getBalls() {
this.owner.Candies // this refers to the Balls objects, but we can use owner to access the container
}
}
}

关于typescript - typescript 中的子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com