将泛型类型与类类型 T 一起使用不满足约束

Ale*_*lls 5 typescript tsc typescript3.0

export type OptionsToType<T extends Array<{ name: Array<string>, type: keyof TypeMapping }>>
  = { [K in T[number]['name'][0]]: TypeMapping[Extract<T[number], { name: K }>['type']] }


export class CliParser<T> {

  opts: OptionsToType<T>;

  constructor() {

  }

}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

在此输入图像描述

有谁知道如何解决这个问题?

Jcl*_*gst 8

由于T可以是任何类型CliParser,所以它太宽泛了OptionsToType。您可以通过执行以下操作来限制它:

export class CliParser<T extends Array<{ name: Array<string>, type: keyof TypeMapping }>> {

  opts: OptionsToType<T>;

  constructor() {

  }

}
Run Code Online (Sandbox Code Playgroud)

确实有点丑。您可能想创建Array<{ name: Array<string>, type: keyof TypeMapping }>自己的类型。