typescript - 从任何方式“推断”类方法参数
问题描述
我有一个类,它有两种方法,如下所示:
export class ResolverType {
prompt = () => ({
type: 'list',
name: 'resolverType',
message: 'Choose a resolver type:',
choices: [
'query',
'mutation'
]
})
partials = (plop) => {
plop.setPartial('resolverType', '{{ resolverType }}')
}
}
这是一种称为 a 的常见类的一部分PlopPrompt
。
每个PlopPrompt
都有相同的形状。它们看起来像这样:
import { NodePlopAPI, PlopGenerator } from 'plop';
abstract class PlopPrompt {
abstract prompt(): PlopGenerator['prompts'][number]
abstract partials(plop: NodePlopAPI): void
}
或者
interface PlopPrompt {
prompt(): PlopGenerator['prompts'][number]
partials(plop: NodePlopAPI): void
}
或切换到static
并使用@PlopPrompt
装饰器。
interface PlopPromptInterface {
prompt(): any
partials(plop: NodePlopAPI): void
}
export function PlopPrompt() {
return <U extends PlopPromptInterface>(constructor: U) => { constructor };
}
我正在寻找一种方法:
- 确保 a
PlotPrompt
有这两种方法。 - 是否
partials
可以自动输入参数?它已经在定义中定义,我不明白为什么我看不到打字并且plop
参数返回为any
.
不太明白为什么plop
在这里输入:
interface Contract {
prompt(): any
partials(plop: NodePlopAPI): void
}
const example: Contract = {
prompt: () => ({
type: 'list',
name: 'resolverType',
message: 'Choose a resolver type:',
choices: [
'query',
'mutation'
]
}),
partials: (plop) => {
plop.setGenerator()
plop.setPartial('resolverType', '{{ resolverType }}')
}
}
但这里没有输入:
interface Contract {
prompt(): any
partials(plop: NodePlopAPI): void
}
class Example extends Contract {
prompt = () => ({
type: 'list',
name: 'resolverType',
message: 'Choose a resolver type:',
choices: [
'query',
'mutation'
]
})
partials = (plop) => {
plop.setGenerator()
plop.setPartial('resolverType', '{{ resolverType }}')
}
}
有没有办法纠正这个问题?我在这里找到了很长的对话,但没有答案。`
也试过这个,使用匿名类。参数,仍然没有输入。
const ResolverType: PlopPrompt = class {
static prompt = () => ({
type: 'list',
name: 'resolverType',
message: 'Choose a resolver type:',
choices: [
'query',
'mutation'
]
})
static partials = (plop) => {
plop.setPartial('resolverType', '{{ resolverType }}')
}
}
解决方案
这是满足上述要求的唯一方法,但ResolverType
不再是一个类。
我想了解我可以让这成为一堂课。
import { NodePlopAPI } from 'plop';
import { PlopPrompt } from '../shared/PlopPrompt';
interface PlopPrompt {
prompt(): any
partials(plop: NodePlopAPI): void
}
export const ResolverType: PlopPrompt = {
prompt: () => ({
type: 'list',
name: 'resolverType',
message: 'Choose a resolver type:',
choices: [
'query',
'mutation'
]
}),
partials(plop) {
plop.setPartial('resolverType', '{{ resolverType }}')
}
}
推荐阅读
- reactjs - 反应 window.innerWidth 的更新值
- javascript - 赛普拉斯:在命令中使用命令时,获取“提供给 cy.request() 的参数在路径 specWindow 处包含循环引用”
- javascript - Jquery:实现分页后搜索不起作用
- c++ - 为什么这个应用程序会崩溃?(未处理的异常在 0x52B13499 (ucrtbased.dll))
- python-3.x - 如何使用 PySide2 的 QPropertyAnimation 平滑显示 QProgressBar 值更新?
- c# - 拾取脚本分配变量和更新文本
- c - Doxygen - 记录 X 宏
- node.js - MERN APP - 如何使用上下文 api 在我的反应组件中访问带有 id 的 express 参数
- flutter - RangeError(RangeError(索引):无效值:只有有效值是0:1)
- javascript - 从 Javascript 中的其他两个数组构建一个新数组