(来自@type/markdown-it 的类型) https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/markdown-it/lib/index.d.ts#L93
我想为方法的可能参数创建参数类型,该markdown-it
use
方法的类型如下:
type PluginSimple = (md: MarkdownIt) => void;
type PluginWithOptions<T = any> = (md: MarkdownIt, options?: T) => void;
type PluginWithParams = (md: MarkdownIt, ...params: any[]) => void;
我有一个反应钩子,我想提交这样的 markdown-it 插件:
type Plugin = MarkdownIt.PluginSimple |
[MarkdownIt.PluginWithOptions, {}?] |
[MarkdownIt.PLuginWithParams, ...any[]]
type Plugins = Plugin[]
function useMarkdown(source: any, plugins?: Plugins) {
React.useEffect(() => {
plugins?.forEach(plugin => md.use(...plugin))
}, [md, plugins])
}
首先,我不知道如何将模板参数添加到第二个插件定义中。
这不起作用:
[<T = any>MarkdownIt.PluginWithOptions<T>, T?]
但大多数情况下,我希望 TS 编译器认识到使用md.use(...plugin)
是安全的。它抱怨说,论点需要支持
Expected at least 1 argument, but git 0 or more
An argument for 'plugin' was not provided.
Type
插入 must have a '[Symbol.iterator]()' method that returns an interator
更改我的线路以手动处理数组案例:
plugins?.forEach(plugin => Array.isArray(plugin) ? md.use(...plugin) : md.use(plugin))
删除迭代器错误消息,但也保留另一个以供使用...plugin