Typescript:无法转换为通用的“ Record <字符串,字符串>”类型?

时间:2019-07-30 21:22:04

标签: typescript

为什么不能使用打字稿来强制执行以下操作:

interface foo {
  foofoo: string
  feefee: string
  faafaa: 'red' | 'blue'
}

变成Record<string, string>吗?我该如何实现?

我尝试过:

  • 将字符串文字red | blue更改为string类型
  • 尝试instanceOfFoo as Record<string, string>
  • 试图将其更改为类型而不是接口

...没有任何帮助的喜悦

1 个答案:

答案 0 :(得分:2)

TypeScript在这里发出错误信号不是因为这两种类型不能相互分配,而是因为它们没有共同的属性,所以这几乎总是错误产生的,并且会给出关于错误的说明对于不存在的情况该怎么办很清楚。

  

将'foo'类型转换为'Record'类型可能是一个错误,因为这两个类型之间都没有足够的重叠。如果这是故意的,请先将表达式转换为“未知”

强调我的。

所以您需要做的是类似

declare const x: foo; // there exists a variable x of type foo.
const y = x as unknown as Record<string, string>; // cast to unknown, then to Record.

Playground link