我有一个询问者问题数组,如下所示:
const prompts = [
{
type: 'input',
name: 'foo',
message: 'Enter a string',
},
{
type: 'number',
name: 'bar',
message: 'Enter a number',
},
] as const;
我想获取查询者在调用后要给我的答案对象的类型prompt()
。我目前的方法如下所示:
import { Question } from 'inquirer';
export type PromptAnswersFor<T extends ReadonlyArray<Question>> = {
[key in T[number]['name']]: string;
^^^^^^
// what do I need to put here to make it work?
};
但是,我不知道如何在类型的右侧键入值PromptAnswersFor
。此刻它总会去string
。
理想情况下,我想PromptAnswersFor<typeof prompts>
成为{ foo: string; bar: number }
. 我很确定这是可能的,但我不知道如何?
编辑:我能够推断出这样一个问题的答案类型:
type AnswerType<Q extends { type: string }> = Q extends { type: 'input' } ? string
: Q extends { type: 'number' } ? number
: Q extends { type: 'password' } ? string
: Q extends { type: 'confirm' } ? boolean
: never;
const inputQuestion = { type: 'confirm' } as const;
type T = AnswerType<typeof inputQuestion>
// -> boolean