【发布时间】:2021-06-18 07:24:03
【问题描述】:
更新
我自己做了一个解决方案,将嵌套类型从静态字段移动到实例字段,这似乎可行但并不完美:https://tsplay.dev/w26Xjw
更新
主要用途是:
- 我想创建一个接受两个参数的泛型函数
; - 这些参数的类型可以是
connected/related - 当我将第一个参数传递给 T 的类型时,它应该自动推断出第二个参数的类型 U
所以问题是:
- 如何正确地使这两种类型连接/关联?我尝试使用嵌套类型,就像我在下面的上一篇文章中一样,这可能不是一种合适的方式,但我不知道。欢迎任何建议。
- 一旦这些类型连接/相关,如果可能的话,后一个类型是否可以从第一个类型自动推断?
这样当用户传递第一个参数时,泛型函数应该限制第二个参数的类型。
我想在 C++ 中写一些类似的东西:
class A {
class InnerType {}
}
template<typename T>
void test(const T& first, const typename T::InnerType& second);
我想创建一个接受两个参数的通用函数:
- 第一个参数应该是
T的类型,并且会有一个嵌套类型T.Param - 第二个参数的类型应该是
T.Param
class A {
static Param = class {
....
}
}
class B {
static Param = class {
....
}
}
// How can I make the T/P match the requirements explain above?
function test<T, P>(first:T, second:P) {
}
然后这样的调用应该通过:
test(new A(), new A.Param()); // OK
test(new A(), new B.Param()); // Fail
test(new B(), new A.Param()); // Fail
test(new B(), new B.Param()); // OK
【问题讨论】:
-
请提供更多细节。如您所见,试图回答您问题的两个人仍然不明白您想要什么。根据 StackExchange 规则,您应该提供一个 complete 示例,以准确显示您正在尝试做什么。例如上面你需要显示
test对参数的作用。正如我在下面和您的欺骗问题 (stackoverflow.com/questions/68032159/…) 中已经说明的那样,您所提出的问题是不可能的。 -
@Inigo 帖子已更新。希望这次能让你明白。
-
好的,这很有帮助,因为您刚刚承认使用“嵌套类型”并不重要,这只是您正在尝试的东西。重要的是解释您的根本问题,而不是要求我们解决您可能首先出错的解决方案。
-
@jayatubi 我添加了我自己的答案,让我们继续在那里聊天)
标签: typescript