gpt4 book ai didi

typescript - 为什么 TypeScript 强制我为在我的函数签名中键入为未定义的参数显式传递未定义?

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

我是一名初级开发人员,我需要帮助。我试过用谷歌搜索这个问题,但我很难用正确的方式来表达它。如果问题具有误导性,请提前道歉。

有人可以帮我理解为什么当我在函数签名中将参数类型设置为未定义时,TypeScript 会强制我将未定义作为参数传递给函数吗?

这就是我想要做的。我想创建一个返回 Action 创建器函数的函数,然后返回 Action 对象:

interface IAction<T, P> {
type: T;
payload?: P;
}

const createActionCreator = <T extends string, P = undefined>(type: T) => (payload: P): IAction<T, P> => ({
type,
payload,
});

const THIS_IS_MY_ACTION_TYPE = '@PREFIXED/THIS_IS_MY_ACTION_TYPE';

const createTestAction1 = createActionCreator<typeof THIS_IS_MY_ACTION_TYPE, string>(THIS_IS_MY_ACTION_TYPE);

const createTestAction2 = createActionCreator<typeof THIS_IS_MY_ACTION_TYPE>(THIS_IS_MY_ACTION_TYPE);

const testAction1 = createTestAction1('some string');
// works fine

const testAction2 = createTestAction2();
// TypeScript complains that an argument was expected

当我调用 createActionCreator 提供 TP 类型时,TypeScript 强制我调用 createTestAction1匹配 P 类型的参数。这是我所期望的。

当我调用 createActionCreator没有 提供 P,或者即使我提供 P 作为 undefined 明确地,TypeScript 强制我调用 createTestAction2 并将 undefined 作为参数。我希望能够在没有参数的情况下调用它。

如果有人能帮助我理解为什么会这样以及如何修复它,我将不胜感激。提前致谢。

最佳答案

函数(payload: P) => {..}有一个参数,所以 Typescript 需要一个参数,即使参数类型是 undefined .尝试使参数可选(使用 ? ),然后删除默认的 = undefined从你的类型参数中输入 <P> .

const createActionCreator = <T extends string, P>(type: T) =>
// ^ type `P` is required
(payload?: P): IAction<T, P> => ({
// ^ parameter `payload` is optional
type,
payload, // if not provided, will be the value `undefined`
});

关于typescript - 为什么 TypeScript 强制我为在我的函数签名中键入为未定义的参数显式传递未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306511/

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