首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JS对象在TypeScript中配置类属性类型

使用JS对象在TypeScript中配置类属性类型
EN

Stack Overflow用户
提问于 2021-06-14 13:48:31
回答 1查看 38关注 0票数 0

假设我有一个像这样的工厂:

代码语言:javascript
复制
const factories = {
  foo: () => 'some string',
  bar: () => 123,
};

我想使用这个对象来键入一个类属性。这个类的目标是拥有一个具有与上面相同的键的属性,但是使用时,工厂的返回类型是,而不是工厂本身。

代码语言:javascript
复制
class MyClass {
    myItems: ???; // What type here to have the below working?
}

const instance = new MyClass();
instance.myItems.foo; // Should be a string, not a function
instance.myItems.bar; // Should be a number, not a function

简而言之,我不希望这样做:

代码语言:javascript
复制
class MyClass {
    myItems: typeof factories;
}

但如下所示:

代码语言:javascript
复制
class MyClass {
    myItems: Record<keyof typeof factories, ReturnType<typeof factories>>;
}

但当然,如果出现此错误,上述操作将不起作用:

TS2344:键入'{ foo:() =>字符串;bar:() =>数字;}‘不满足约束'(...args: any) => any’。另一种类型是'{ foo:() =>字符串;bar:() =>数字;}‘不提供签名的匹配“(...args: any):any’。

你有什么帮助吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-14 14:04:35

你可以这样做:

https://www.typescriptlang.org/play?#code/MYewdgzgLgBAZgQ2FEAnAlgUwjAvDAbwCgZ4QQAuGACgEo8A+GAcghAFtMZoMwBzZgBoSMAEYJUVOoxgBGAEwBmYQF8A3ESJQAngAcuAMSQpU2gDwAVJvmm4mFjVr2HjabQDUEAGwCu2S9aEIgDaANIw6GAwANaY2iBwMBYAulQWYckwmAAeUJhgACY4RshuZpFwmKgwAKpMAPy1MFRgmABuVRrqmqCQsG3efhBUJSYeg-46+gnwrhjYgcSkcORUzHnQQiLiknJKqhpAA

代码语言:javascript
复制
const factories = {
  foo: () => 'some string',
  bar: () => 123,
};

type Factory<T> = () => T;

type FactoryValues<T> = {
  [K in keyof T]: T[K] extends Factory<infer U> ? U : never;
};

const values: FactoryValues<typeof factories> = {
  foo: 'test',
  bar: 123,
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67971455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档