Pesquisa de site

Defina um tipo de objeto vazio em TypeScript


Estou procurando maneiras de definir um tipo de objeto vazio que não possa conter nenhum valor.

type EmptyObject = {}

const MyObject: EmptyObject = {
  thisShouldNotWork: {},
};

Objetos com esse tipo podem adicionar quaisquer propriedades. Como posso forçar MyObject a ser sempre um objeto vazio, em vez disso?

Meu caso de uso atual é usar o tipo EmptyObject dentro de uma interface.

interface SchemaWithEmptyObject {
  emptyObj: EmptyObject; 
}

Resposta #1

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

const one: EmptyObject = {}; // yes ok
const two: EmptyObject = {a: 1}; // error

O que estamos dizendo aqui é que todas as propriedades eventuais do nosso EmptyObject só podem ser never, e como never não tem valor representável, criar tal propriedade não é possível, portanto o objeto permanecerá vazio, pois esta é a única maneira de criá-lo sem erro de compilação.

Resposta #2

type EmptyObject = Record<any, never>

Isto é equivalente à resposta de Maciej Sikora, mas faz uso do tipo utilitário Record.

Artigos relacionados