在 TypeScript 中定义空对象类型

MrK*_*Key 13 types typescript typescript-typings

我正在寻找定义不能容纳任何值的空对象类型的方法。

type EmptyObject = {}

const MyObject: EmptyObject = {
  thisShouldNotWork: {},
};
Run Code Online (Sandbox Code Playgroud)

具有该类型的对象可以自由添加任何属性。我怎样才能强制MyObject始终是一个空对象呢?

我的实际用例是在接口内使用 EmptyObject 类型。

interface SchemaWithEmptyObject {
  emptyObj: EmptyObject; 
}
Run Code Online (Sandbox Code Playgroud)

Mac*_*ora 21

type EmptyObject = {
    [K in any] : never
}

const one: EmptyObject = {}; // yes ok
const two: EmptyObject = {a: 1}; // error
Run Code Online (Sandbox Code Playgroud)

我们在这里所说的是,我们的所有最终属性EmptyObject只能是never,并且由于never没有代表值,所以不可能创建这样的属性,因此该对象将保持为空,因为这是我们创建它而不会出现编译错误的唯一方法。


Mik*_*gel 10

type EmptyObject = Record<any, never>
Run Code Online (Sandbox Code Playgroud)

这相当于Maciej Sikora 的答案,但使用了Record 实用程序类型

  • 或者`Record&lt;string, never&gt;`以避免使用显式的any(eslint错误) (2认同)

Gor*_*lke 8

根据 VSC linter type emtyObj = Record<string, never>