gpt4 book ai didi

javascript - Javascript 中具有泛型的高阶类?

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

我想知道在 React Native 中是否有合适的方法来包装类似于高阶组件的类?我有以下内容:

const RecyclerViewDataWrap = <P>(Wrapee: Class<React$Component<P, *>>) => {
return class {
props: P

constructor(props: P){
this.props = props
}
render(){
return (
<Wrapee {... this.props} />
)
}
}
}

export default RecyclerViewDataWrap

// in some other component file:
export const SomeComponentData = RecyclerViewDataWrap(SomeComponent)

这允许我创建 SomeComponentData 对象,这些对象将使用我告诉它的 Prop 渲染 SomeComponents。但是,我希望能够随它一起声明泛型类型,以便构造函数可以知道它需要什么类型。理想情况下,我想做这样的事情:

type Props = {
title?: string,
price?: number,
}
export const SomeComponentData = RecyclerViewDataWrap<Props>(SomeComponent)

最佳答案

我有点明白了(我使用类 Props 而不是类型):

说你有

class SomeComponent {
constructor(public name: string) {
}
}

class Props {
title?: string;
price?: number;
}

那么你可以这样做:

type Constructor<T> = new(...args: any[]) => T;

function RecyclerViewDataWrap<P, T extends Constructor<{}>>(Props: new ()=> P, Base: T) {

return class extends Base {
props: P = new Props();

constructor(...args: any[]) {
super(...args);
}
}
}

const SomeComponentData = RecyclerViewDataWrap(Props, SomeComponent);


let componentData = new SomeComponentData("My Component");
componentData.props.title = 'My title';

console.log(componentData);

我主要是根据 https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#support-for-mix-in-classes 制作的和 Typescript instantiate generic object

也许 @cartant 可以验证这一点,因为他似乎对这些东西了解得更多。

关于javascript - Javascript 中具有泛型的高阶类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533726/

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