【发布时间】:2022-12-18 18:37:21
【问题描述】:
我在玩 TypeScript 泛型,有点困惑。
我基本上是在尝试创建一个接口,该接口具有可以接收任意选项参数的方法。这个参数可以是任何对象。确切的对象是什么样子是由实现类决定的。
interface MyOptions {
foo: string
}
interface TestInterface {
doSome<T extends Record<string, unknown>>(value: T): void
}
class TestClass implements TestInterface {
doSome<T = MyOptions>(value: T): void {
value.foo // complains that foo doesn't exist
}
}
一切看起来都很好,但是当我尝试访问 value.foo 时,似乎没有键入 value。
难道我做错了什么?
更新
我发现了一些关于未扩展 Record<string, unknown> 的接口的有用信息,说使用 type 代替(参见 interface object couldn't extends Record<string, unknown>)。
但是,如下所示更新上面的 sn-p 后,问题仍然存在。
type MyOptions = {
foo: string
}
interface TestInterface {
doSome<T extends Record<string, unknown>>(value: T): void
}
class TestClass implements TestInterface {
doSome<T = MyOptions>(value: T): void {
value.foo // complains that foo doesn't exist
}
}
【问题讨论】:
-
this approach 是否满足您的需求?如果是这样,我可以写一个答案来解释;如果没有,我错过了什么?
-
这种方法可行,但我正在处理的实际接口将有多种方法接收不同类型的参数。这可以像this 那样解决,但不是那么明确。
-
我不确定我想要的是否可行。也许这种方法确实是可行的方法;)
-
不,那只是一个default。
-
当我有机会时,我会写一个答案。
标签: typescript generics