经过多年的老派从头开始 Redux 后,我正在尝试 Redux 工具包。使用
createSlice
,我定义了我的操作,并带有一些 JSDoc 注释:
export const viewBuilderSlice = createSlice({
name: "views",
initialState,
reducers: {
/**
* Action to set all view layers in a single function call,
* helpful for loading saved view into the map viewer
*/
SetViewLayers: (state, action: PayloadAction<string[]>) => {
// do reducer stuff
},
/**
* Toggle a single layer on or off in the current view
*/
ToggleViewLayer: (state, action: PayloadAction<string>) => {
// do reducer stuff
},
},
});
export const { SetViewLayers, ToggleViewLayer } = viewBuilderSlice.actions;
export const viewBuilderReducer = viewBuilderSlice.reducer;
将鼠标悬停在倒数第二行,我看到我的 JSDoc 注释:
然后当我将动作导入到要调用的文件中时,在导入行上,我仍然看到我自己的注释
但是当我然后去 call
dispatch
中的函数时,我写的 JSDoc 注释似乎被一些通用的 redux-toolkit 注释覆盖了:
我想这可能是使用
createSlice
并导出解构动作的功能,所以我尝试使用createAction
独立定义动作:
/**
* Action to set all view layers in a single function call,
* helpful for loading saved view into the map viewer
*/
export const ToggleViewLayer2 = createAction<string>("views/TOGGLE_VIEW_LAYER");
但是然后将其导入到另一个要使用的文件中,会出现完全相同的问题 - 在
import
行上,我的 JSDoc 被保留,但随后调用 dispatch(ToggleViewLayer2)
,将鼠标悬停在 ToggleViewLayer2()
上会显示 redux 的 JSDoc 注释。
这里有什么?对于明确记录的函数,只有在“调用”它们时,外部包自己的 JSDoc 注释如何以及为什么会覆盖我自己的注释? JSDoc 注释的一半目的是帮助我自己或其他开发人员理解该函数的作用,但是当 redux 的 JSDocs 注释掩盖了我自己的注释,或者 JSDoc 注释在声明函数和调用它之间发生变化时,它就没有帮助。
老实说,注释能做到这么远(从减速器到动作创建者)真是一个奇迹 - TypeScript 过去没有保留对映射类型的注释。
对于您手头的问题:它将注释附加到映射属性的类型,但不附加到显式函数重载。
看这个例子:
/** A function overload comment */
function foo(){}
const obj = {
/** A property comment */
foo: foo
}
// these two have different comments
obj.foo
obj.foo()