如何从打字稿中的对象和键中提取值类型
How to extract value type from object and keys in typescript
我正在使用 arg
和 fp-ts
。我想要一个 returns 基于输入键值之一键入的函数。
export const getArg = <T extends Spec> (args: Result<T>) => (argName: {[K in keyof T]: T[K]}): O.Option<T[K]> =>
O.fromNullable(args[argName])
但是它说我不能用 K in keyof T
建立索引,尽管 K
是实际的键。它不会在 Option
中看到 K
。我需要类型方面的帮助。
Result
export type Result<T extends Spec> = { _: string[] } & {
[K in keyof T]?: T[K] extends Handler
? ReturnType<T[K]>
: T[K] extends [Handler]
? Array<ReturnType<T[K][0]>>
: never;
};
我无法使用 arg
库。但是我能够使用 command-line-args
提取类型
export const getArg =
(args: CommandLineOptions) =>
<K extends keyof CommandLineOptions>(
argName: K
): O.Option<CommandLineOptions[K]> =>
O.fromNullable(args[argName])
正确的方法是使用 extends keyof
而不是 in keyof
,然后通过 F[K]
引用所需的类型
我正在使用 arg
和 fp-ts
。我想要一个 returns 基于输入键值之一键入的函数。
export const getArg = <T extends Spec> (args: Result<T>) => (argName: {[K in keyof T]: T[K]}): O.Option<T[K]> =>
O.fromNullable(args[argName])
但是它说我不能用 K in keyof T
建立索引,尽管 K
是实际的键。它不会在 Option
中看到 K
。我需要类型方面的帮助。
Result
export type Result<T extends Spec> = { _: string[] } & {
[K in keyof T]?: T[K] extends Handler
? ReturnType<T[K]>
: T[K] extends [Handler]
? Array<ReturnType<T[K][0]>>
: never;
};
我无法使用 arg
库。但是我能够使用 command-line-args
export const getArg =
(args: CommandLineOptions) =>
<K extends keyof CommandLineOptions>(
argName: K
): O.Option<CommandLineOptions[K]> =>
O.fromNullable(args[argName])
正确的方法是使用 extends keyof
而不是 in keyof
,然后通过 F[K]