来自对象值的 Typescript 动态接口
Typescript dynamic interface from object values
我正在从字符串创建 args 解析器。
我有定义参数名称和默认值的接口
interface IargsDef {
name: string;
default?: string;
}
我想要的是智能感知(制作一些动态接口 idk)与解析结果一起工作。
对于 args def
[{
name: "test1"
},
{
name: "test2",
default: "test"
}]
应该是这样的
{
"test1": "some value",
"test2": "some value or default"
}
但智能感知不会看到这些属性。
如果我正确理解了您要查找的内容,那么这样的事情可能会奏效:
interface IArgsDef<Name extends string> {
name: Name;
default?: string;
}
const argsDef = {
test1: { name: "test1" },
test2: { name: "test2", default: "test" }
}
type ArgsInput<Defs extends Record<string, unknown>> = Defs[keyof Defs] extends IArgsDef<infer _>
? Record<keyof Defs, string>
: never
type ExpectedInput = ArgsInput<typeof argsDef>
// type ExpectedInput = {
// test1: string;
// test2: string;
}
我将您的 args 定义的定义方式从一个数组更改为一个对象,以便完成这项工作,但我不确定是否可以接受。
我正在从字符串创建 args 解析器。 我有定义参数名称和默认值的接口
interface IargsDef {
name: string;
default?: string;
}
我想要的是智能感知(制作一些动态接口 idk)与解析结果一起工作。
对于 args def
[{
name: "test1"
},
{
name: "test2",
default: "test"
}]
应该是这样的
{
"test1": "some value",
"test2": "some value or default"
}
但智能感知不会看到这些属性。
如果我正确理解了您要查找的内容,那么这样的事情可能会奏效:
interface IArgsDef<Name extends string> {
name: Name;
default?: string;
}
const argsDef = {
test1: { name: "test1" },
test2: { name: "test2", default: "test" }
}
type ArgsInput<Defs extends Record<string, unknown>> = Defs[keyof Defs] extends IArgsDef<infer _>
? Record<keyof Defs, string>
: never
type ExpectedInput = ArgsInput<typeof argsDef>
// type ExpectedInput = {
// test1: string;
// test2: string;
}
我将您的 args 定义的定义方式从一个数组更改为一个对象,以便完成这项工作,但我不确定是否可以接受。