描述
我希望根据输入参数返回string
或string[]
,在本例中,输入参数名为options
,它是input
属性:options.input
.
我试图让TypeScript根据此输入推断它,但似乎无法使它工作。
类型
类型定义如下。
const TextInputTypes = <const>[
"text",
"number",
"password",
"email",
"tel",
"url",
"search",
"color",
"date",
"time",
"datetime-local",
"month",
"week",
"range",
"file",
];
const CheckboxTypes = <const>["checkbox", "radio"];
const SelectTypes = <const>["select"];
type TextType = (typeof TextInputTypes)[number];
type CheckType = (typeof CheckboxTypes)[number] | (typeof SelectTypes)[number];
type InputType = TextType | CheckType;
type PromptOptions = {
input: InputType;
placeholder: string;
entries: { value: string; text: string }[];
};
示例
如果options.input
为TextType,则返回string
,否则返回string[]
。
编号
我试过了,但没有成功
type ReturnType<T extends InputType> = T extends TextType ? string : string[];
const value: ReturnType<typeof options.input>;
它基本上在一个函数中,如下所示:
function foo = (name: string, options: Options) => {}
输出仅显示string | string[]
。
3条答案
按热度按时间lmvvr0a81#
除了@JDB和@adsy提供的答案之外,您还可以使用
extends
来实现您的目标:检查这个Playground
qco9c6ql2#
使用函数重载。
使用函数重载。
nue99wik3#
可以使用函数重载检测
input
属性的类型,然后返回string
或string[]
。请注意,这需要将匿名函数(const foo = () => {}
)更改为命名函数(function foo() {}
)。对于像您这样的简单情况,这很容易阅读和理解,但是如果您有许多这样的参数,那么写出所有可能的重载可能会有点乏味。