我有点惊讶地发现:
type TypeA = Record<string, never> & { propA: string };
const a: TypeA = { // <- Type 'string' is not assignable to type 'never'
propA: "lsjdf",
}
Run Code Online (Sandbox Code Playgroud)
在 TypeScript 中不起作用。我很想用Record<string, never>意味着“空对象”的东西替换,但无法想出表示空对象的类型。
我也很想了解为什么上述不起作用。
never意思是从不。
Record<string, never>意味着“string类型访问器可以never有一个值”(尽管{ [Symbol()]: 'foobar' }是可能的)。YourTypeA无法使用,因为它产生了一个悖论:propA是一个string可以never存在的必需属性。签名是正确的,但类型之间没有可用的交集。
“空”有几个选项:
Record<string, never>是一个空对象,因为您无法向其添加任何字符串类型访问器属性(再次强调,除非您使用Symbol),因此它将始终为空。{}不指定任何属性,因此可以将任何类型分配给它,因为每种类型都满足所有零要求(除非该类型永远不能具有可访问的属性,即 和undefined)null。然而,虽然const foo: {} = 'bar'是可能的,{}但没有列出任何属性,因此如果没有转换/注释,您实际上无法使用它做任何事情。| 归档时间: |
|
| 查看次数: |
6235 次 |
| 最近记录: |