【问题标题】:Action creators doc comments not showing动作创建者文档评论未显示
【发布时间】:2021-07-21 00:14:56
【问题描述】:

考虑在我们的应用程序中采用 redux-toolkit,但我似乎无法获得我们为动作创建者展示的文档集。

旧代码:

const ADD_NAME = 'ADD_NAME';
/**
 * Sets the name for the user in our state.
 * @param name The updated name
 */
export function addName(name: string) {
   return {
     payload: name,
     type: ADD_NAME,
   };
}

在 VSCode 中,每当我发送 addName() 时,将鼠标悬停在函数上都会按预期提供带有文档的工具提示。

使用 redux-toolkit 重新创建这个动作创建器:

/**
 * Sets the name for the user in our state.
 * @param name The updated name of the User
 */
export const addName = createAction<string>(ADD_NAME);

当我在调度期间将鼠标悬停在这个新的 addName 上时,而不是看到我写的文档:

Sets the name for the user in our state.

我看到了:

Calling this {@link redux#ActionCreator} with an argument will return a {@link PayloadAction} of type T with a payload of P

这是 redux-toolkit 类型文件中ActionCreatorWithPayload 的内部文档。

我为我的 addName 动作创建者添加的 doc cmets 而不是 redux-toolkit doc cmets,我错过了什么?

我意识到一个是我在评论一个函数,另一个是在评论一个 const var,但我希望我的 cmets 将 addName const 显示为工具提示,不是吗?

【问题讨论】:

    标签: typescript redux redux-toolkit


    【解决方案1】:

    这是一个很好的问题。这似乎取决于编辑器 - 以及访问文档的上下文。

    在 VSCode 中,一开始是这样的:

    当你只写addName时,直到写完,你从变量addName中获取文档块。一旦您编写了(,它就会“查看”变量值、识别函数并从函数本身获取文档块——这就是动作创建者。

    我不认为你真的可以进一步覆盖这种行为,但我很想看到有人想出一个好方法。


    我做了一些更多的实验:虽然 TypeScript 确实丢失了大多数映射函数类型的 cmets,但您可以使用一个对象参数而不是位置参数,并使用 docblocks 注释各个属性。鉴于 TypeScript 目前提供的功能(当然,“参数名称”的自动完成),这可能会为您提供最多的信息:

    
    const slice = createSlice({
      name: 'test',
      initialState: 0,
      reducers: {
        test: {
          prepare({name, age}: {
            /** The name! */
            name: string,
            /** The age! */
            age: number
          }
          ) {
            return { payload: { name, age } };
          },
          reducer(x, action: any) { }
        }
      }
    })
    
    // hovering over age or name will give you more info
    slice.actions.test({ age: 5, name: "" })
    

    【讨论】:

    • 这肯定会导致开发体验不那么直观。我们有一堆带有多个参数的动作创建者。当您调用调度解释每个参数及其用途时,工具提示中的文档就在那里。我知道您可以使用 RTK 中的那些“准备”函数来处理具有多个参数的动作创建者,而且我们很可能必须将文档移至该辅助函数。但是,它仍然使我们的代码库使用起来不那么直观——即使它最终更干净/更少样板。
    • 是的,不幸的是,TSServer 的工作原理差不多 - 我担心那里没有太多工作要做
    • 添加了一个选项来传递至少一点信息。
    • 是的,我认为准备函数的方式可能是最好的选择,尽管它仍然需要更多的打字。超级沮丧!不过,感谢您对此有所了解。
    • 我的意思是,我在这里的示例中使用了 prepare 函数,但我认为您可以以完全相同的方式键入 PayloadAction 的有效负载。
    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2023-03-12
    • 2012-06-30
    相关资源
    最近更新 更多