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