【发布时间】:2021-10-30 12:46:11
【问题描述】:
我正在尝试严格键入钩子的返回回调。
- 如果未指定
InputType,则在调用函数时不需要输入,如果提供了任何输入,则应报错。 - 如果指定了
InputType,它应该期望输入类型,如果不是指定的类型,则会报错。
例子
// overload attempts
async function someFnAsyncCB(): void;
async function someFnAsyncCB<InputType>(input: InputType): void;
function useSomeFnHook<InputType = undefined>() {
const [reactiveVar, setReactiveVar] = useState("");
// ...
const someFnAsync = useCallback(
async function someFnAsyncCB<InputType>(input?: InputType): void {
// ...
},
[reactiveVar, etc],
);
return someFnAsync;
}
我的实现工作除了当 someFnAsync 没有使用输入调用但 InputType 被指定为未定义以外的其他类型时。 Typescript 应该抱怨我没有提供输入值。
我尝试重载函数,但 Typescript 没有将新的重载函数与原始函数关联。
我将如何实现我的初始目标?
【问题讨论】:
-
也许使用
type或interface输入函数会起作用-stackoverflow.com/a/53143568/11145447。 -
@programmerRaj 我应该如何改变它来实现我的目标?
-
为什么函数
someFnAsyncCB是通用的?为什么需要someFnAsyncCB<InputType>(input: InputType): void而不仅仅是someFnAsyncCB(input: any): void? -
@programmerRaj 严格类型检查。我不希望接受无效的输入。
-
InputType是一种类型吗?
标签: javascript reactjs typescript overloading