【问题标题】:How to satisfy the constraint of Record<string, unknown> with interface如何用接口满足 Record<string, unknown> 的约束
【发布时间】:2020-12-16 10:01:02
【问题描述】:

我的 linter 说我不应该在 TS 中使用 object 作为类型。但是,我正在使用的库要求扩展对象的泛型类型。

因此,我正在使用如下所示的库编写一个通用组件:

const Component = <T extends object>(props: CustomProps<T>): React Element => etc. 

由于 linter 在抱怨,我尝试将其切换到

const Component = <T extends Record<string, unknown>>(props: CustomProps<T>): React Element => etc. 

但是,如果我再做这样的事情:

interface MyInterface {
  something: string;
  goes: number; 
  here: string;
}

const CallerComponent = () => Component<MyInterface> />

TS 表示 MyInterface 不满足约束 Record。除了这样做还有什么办法吗

interface MyInterface extends Record<string, unknown>

我宁愿不必遍历整个代码库,将其添加到每个接口,所以很高兴知道是否有一种方法可以在我说 T 肯定是一个对象的地方键入它。

提前感谢您的帮助。

【问题讨论】:

  • Record&lt;string, unknown&gt; 需要索引签名。为什么object 不为你工作?你也可以试试T extends Record&lt;keyof T, unknown&gt;
  • 嗨 Titian,谢谢你 - eslint 有一条规则反对使用对象。我会试试你的建议。
  • eslint 规则持保留态度。他们在那里是为了防止人们跳枪,但在这种情况下object 可能没问题
  • 好的,谢谢 - 知道这实际上很有帮助。如果我有时间,我可能会忽略这条线并回到它
  • @LindaPaiste 如果问题出在 ESLint,{} 类型也会报错。

标签: reactjs typescript eslint


【解决方案1】:

我遇到了同样的问题,发现你可以用type而不是interface声明你的对象,它解决了它。

在你的情况下是:

type MyInterface = {
  something: string
  goes: number
  here: string
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2022-06-11
    • 2021-11-26
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多