typescript - 在 TypeScript 中使用可选泛型类型时如何避免不必要的参数?
问题描述
StateFunction 有一个可选的(第二个)泛型类型——因为它有一个默认值。问题是,如果我不通过第二个泛型,我仍然必须将undefined
其作为参数,即使我认为此时它是可选的。
使args
可选 usingargs?
确实有帮助,但它强制检查空值,即使强硬类型也不能为空。
我也可以重载该函数,但这不是最佳的,因为我使用的实际函数很长。
在未指定第二个泛型的情况下,是否有真正的解决方案可以使该论点消失?
interface StateFunctionAction<T, P> {
(saved: T, args: P): void
}
const StateFunction = <T, P = undefined>(value : T, action: StateFunctionAction<T, P>) => {
let saved = value;
return (args : P) => action(saved, args);
}
const example1 = StateFunction<string>("Hello World", (saved) => console.log(saved))
example1(); // Help -> An argument for 'args' was not provided.
const example2 = StateFunction<string, number>("Hello World", (saved, n) => console.log(saved + " " + n))
example2(5);
解决方案
而不是undefined
用作默认的泛型类型,void
而是使用。这将使争论消失。
const StateFunction = <T, P = void>(value : T, action: StateFunctionAction<T, P>) => {
let saved = value;
return (args : P) => action(saved, args);
}
推荐阅读
- knockout.js - 昏死。如何确定订阅了哪些可观察变量?
- excel - 试图在excel电子表格VB.Net上列出文件
- json - MarkLogic cts.jsonPropertyRangeQuery 日期和 $property-name
- python-3.x - 如何在大型数据集(Train、Dev、Test)上使用 CountVectorizer 和 TfidfTransformer?
- pandas - 在条件中将时间值与表中的其他行进行比较
- scala - Scala - 如果有文件则显示文件夹
- javascript - JavaScript CallBack 在 Xamarin.Android 中引发 TypeError
- python - Python - 将美元值转换为浮点数
- python - 获取列表中的 XML 元素
- java - 在Junit测试期间适应AEM中的component.json时如何测试条件是否为空?