1

我有一个询问者问题数组,如下所示:

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
4

0 回答 0