You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何约束装饰器的类型参数为被装饰方法返回类型的子集

如何约束装饰器的类型参数为被装饰方法返回类型的子集

我现在正尝试实现一个装饰器,要求它的类型参数U必须是被装饰方法返回类型的子集,但折腾了半天都没搞定,我的代码是这样的:

function foo<U>() {
    return function<T extends U>(target: any, propertyKey: any, descriptor: TypedPropertyDescriptor<() => T>){};
}

class Bar { 
    baz: number = 0;
}

class Baz {
    @foo<Bar>()        // 本来应该合法,但现在报1241错误
    @foo<null>()       // 本来应该合法,但现在报1241错误
    @foo<Bar | null>() // 这个是合法的,目前也确实没问题
    @foo<number>()     // 本来应该报错,现在确实报错了
    qux(): Bar | null {
        return new Bar();
    }
}

我不想修改这个方法的返回类型,我猜这就是问题的关键。我只是想加个类型检查,确保U是被装饰方法返回类型的子集。

补充说明:我开启了experimentalDecorators实验性选项。

备注:内容来源于stack exchange,提问作者witrin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:34:38