【发布时间】:2020-07-06 11:10:19
【问题描述】:
我正在尝试将泛型值传递给通过索引访问的类型,但我遇到了语法错误。
我在名为 GatsbyNode 的接口上定义了一个名为 onCreateNode 的函数类型签名:
interface GatsbyNode {
...
onCreateNode?<TNode extends object = {}>(
args: CreateNodeArgs<TNode>,
options?: PluginOptions,
callback?: PluginCallback
): void
...
我现在创建了一个名为 onCreateNode 的函数,我想在将值传递给 TNode 泛型的同时为其分配 GatsbyNode['onCreateNode'] 的类型:
export const onCreateNode: GatsbyNode['onCreateNode']<AGenericTypeIWantToPassIn> = ...
但是,我在第一个尖括号 (<) 处收到语法错误,告诉我这不是有效的 TypeScript。
【问题讨论】:
-
我认为错误是因为您将 {} 分配给对象,而您不能在界面中执行此操作(我相信 - 如果我错了,请纠正我)
-
@MaxCarroll 我不确定我是否理解。
-
onCreateNode?<TNode extends object = {}由于默认分配 ` = {} `,这里的这一行导致错误,您应该能够删除= {},这样会少一个错误。默认赋值在类中是可能的,但在 TypeScript 中不是接口或类型 -
`onCreateNode?
` 定义来自一个库。另外,我不确定删除 = {}是否会有所帮助,因为= {}的目的是使用一个空对象作为泛型的值(如果没有提供)。泛型的extends object部分是为了确保用于泛型的值是一个对象(即您不能将字符串作为泛型的值传入)。 -
好吧,我认为这在 TypeScript 中是不可能的,我的编译器也说,我正在文档中寻找在接口中对泛型类型进行默认赋值的证据,但没有'还没有找到任何东西,如果我找到任何东西会更新
标签: typescript