gpt4 book ai didi

TypeScript:仅当 T 是某种类型时才使通用接口(interface) A 的方法可用

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:04 24 4
gpt4 key购买 nike

请看这段代码:

interface A<T> {
method1(): A<T>;
}

interface B<T extends Function> extends A<T> {
method2(): B<T>;
}

var foo: A<Function>;
foo.method1();
foo.method2();

我预计 fooB<Function> 兼容输入,但我得到 error TS2339: Property 'method2' does not exist on type 'A<Function>' .我可以重写接口(interface)吗 B以某种方式让它工作?

实际上,我正在尝试修复 lodash 的 _.memoize 的类型:

// This should be OK. The type of result1 should be compatible with aFunction.
var result1 = _(aFunction).memoize().value();

// And this should be an error.
var result2 = _(aNonFunctionValue).memoize().value();

更新。基本上,我的问题是:我可以为 A<T> 编写这样一个通用方法吗?只有在 T 时才可用是其他类型的子类型 U

最佳答案

Can I rewrite the interface B somehow to get it to work?

解决方案

代码如下:

interface A<T> {
method1(): A<T>;
}

interface B<T extends Function> extends A<T> {
method2(): B<T>;
}

interface A<T> {
method2<T extends Function>(): B<T>;
}

var foo: A<Function>;
foo.method1();
foo.method2(); // works!

得出解决方案

让我们退后一步,想想我们想要做什么:

var foo: A<Function>;
foo.method2(); // Should work

这意味着A<Function>应该有 method2在上面。所以:

interface A<T> {
method2<T extends Function>(): B<T>;
}

并且此方法二在 T 上添加了一个通用约束并返回 B 类型的东西.

剩下的在最终解决方案中就很清楚了🌹

关于TypeScript:仅当 T 是某种类型时才使通用接口(interface) A<T> 的方法可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com