我试图用typescript推断类型交集的泛型,但不确定为什么编译器不能正确推断位置参数。例如:
type Brand<T, Y> = T & { __brand: Y}
type Foo = Brand<number, 'Hello'>
type ExtractT<T> = T extends Brand<infer A, unknown> ? A : never
function test(a: ExtractT<Foo>) {
}
test(1) <-- error
我希望ExtractT
可以从Brand<number,>
定义中提取number
。
有什么方法可以从Brand
中提取number
类型吗?
Playground链接:https://www.typescriptlang.org/play?#code/C4TwDgpgBAQgTgQwHYBMA8AVANFAmgPigF4oMoAyKAbygH1aAjRVALjwF8BYAKB9EigAxAPbDisZuiQBXALYMIcHAHIAEhAA2G4cvw8+4aAFEAHsEQBjYBkyESZCGYioAzhOToAlkgBmiqACCONJIANZIwgDuSIQA-IFQbEgQAG6K+tw+IVaewkhQwBAuwAAUCGym5ghWNiLC+ACU1BlcvNyFxSUAjA1AA
2条答案
按热度按时间ui7jx7zq1#
我也面临着同样的问题。从这条注解(从类型交集推断泛型)中,我意识到我们所需要的就是将类型保存在某个地方,以便typescript可以找到它,并在以后使用推断输出它。它仍然不是很方便,但至少它对我来说工作得很好:)
以下是我的问题以及我如何解决它的示例:https://tsplay.dev/w29YjW
mwkjh3gx2#
如果你确定
__brand
不会与任何其他对象冲突,你可以尝试...