gpt4 book ai didi

javascript - 如何在 Closure 中为函数调用指定泛型类型参数?

转载 作者:行者123 更新时间:2023-11-30 11:17:45 26 4
gpt4 key购买 nike

我正在努力减少代码库中意外未知的泛型类型参数的使用。我正在使用如下所示的 Closure TTL 咒语将未知泛型类型强制转换为 undefined 类型,希望引发错误让我找到这些情况(参见 this related question)。

 * @template T
* @template TYPE_I_ACTUALLY_USE := cond(isUnknown(T), 'undefined', T) =:

这让我想到了这样一个案例:

/**
* @template T
* @template R := cond(isUnknown(T), 'undefined', T) =:
* @param {function():R} factory
* @return {{prop: R}}
*/
function factoryWrapper(factory) {
return {prop: factory()};
}

var instance = factoryWrapper(() => 2);

这个factoryWrapper 函数接受一个生成R 类型值的factory 函数,调用它,并将结果包装在 中{prop: ...},返回类型为 {prop: R}。但是因为我在调用 factoryWrapper 时没有指定 TR,所以它不知道它们应该是什么类型,并且无法判断所提供的工厂函数是否返回正确的类型,因此它会产生错误或未类型化的输出:

input0:11: WARNING - inconsistent return type
found : number
required: undefined
var instance = factoryWrapper(() => 2);

在具有原生类型注释语法的语言中,如 TypeScript,我可能会通过在调用中包含泛型类型参数来解决此问题:

var instance = factoryWrapper<number>(() => 2);

但是,我一直没能找出 Closure 的任何等效语法。我做了一些猜测,如下所示,但都没有奏效。

var instance = factoryWrapper/** <number> */(() => 2);

如何在 Closure JavaScript 中为函数调用指定泛型类型参数?

最佳答案

Closure Compiler 不允许您在调用泛型函数时指定类型参数。但我认为转换回调会做你想做的。就像是:
var instance = factoryWrapper(/** @type {function(): number} */(() => 2));

关于javascript - 如何在 Closure 中为函数调用指定泛型类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935018/

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