【问题标题】:Typescript ts-check javascript genericsTypescript ts-check javascript 泛型
【发布时间】:2017-09-28 08:00:24
【问题描述】:

使用 TypeScript 的新 ts-check,我不知道如何处理泛型函数。

/**
 * @type {Reducer<IPoiState, any>}
 */
const poi = handleActions({
  [ADD_BOOKMARK_START]: (state) => {
    return { ...state };
  },
}, {});

handleActions 类型来自 Definitey Typed,看起来像...

export function handleActions<State>(
    reducerMap: ReducerMap<State>,
    initialState: State
): Reducer<State, any>;

所以,我收到一条错误消息...

Type 'Reducer<{}, any>' is not assignable to type 'Reducer<IPoiState, any>'.
  Type '{}' is not assignable to type 'IPoiState'.

是否有强制通用通过?

【问题讨论】:

  • IPoiState 长什么样子?
  • 我只能猜测,但我认为您的 handleActions 声明中出现的类型是错误的。 StateIPoiState 是否也在类型系统中的某个位置?类型系统错误地确定handleActions 返回Reducer&lt;{}, any&gt;,所以你需要让它实际上是Reducer&lt;State, any&gt; 类型,(我假设还让它认识到StateIPoiState) .

标签: javascript typescript definitelytyped


【解决方案1】:

您可以强制转换或键入断言对象,方法是在前面添加您希望它位于前面的类型,并使用像 &lt;IPoiState&gt;{} 这样的尖括号。

Type Assertion

【讨论】:

  • 不应该是必要的,因为 TypeScript 有“鸭子打字”。
  • @Sahuagin Ineresting,在这种情况下,我们需要查看 IPoistate 的样子才能知道这些方法是否受支持。
  • 好吧,现在我想起来了,既然他使用变量ADD_BOOKMARK_START 作为成员名,那么也许你是对的,并且需要演员表。如果我设置一个类似的示例,除非我使用它,否则它将无法工作。
  • 请记住,上面的代码是 JavaScript,而不是 TypeScript。
  • @jcreamer898 如果不是 TypeScript,为什么要针对它运行转译器?或者你的意思是你的函数是纯 JS 的?
猜你喜欢
  • 2022-11-29
  • 1970-01-01
  • 2017-11-05
  • 2020-08-08
  • 2019-05-30
  • 2020-07-23
  • 1970-01-01
  • 2020-04-12
  • 2012-10-04
相关资源
最近更新 更多