Posso usar o nome da propriedade do objeto como um valor de string no objeto? Quer dizer, quero conseguir isso:
type MyObjectType = /* ... */
const myValidObject: MyObjectType = {
a: 'a',
b: 'b'
} // valid object of type MyObjectType
const myInvalidObject: MyObjectType = {
a: 'a',
b: 'c'
} // invalid object of type MyObjectType, property b should have value 'b'
Eu tentei algo assim, mas não funciona:
type MyObjectType = {
[K: string]: `${K}`
}
Não existe um tipo específico
MyObjectType
no TypeScript que atenda às suas necessidades. Em vez disso, você pode criar um tipo genéricoK
onde o parâmetro de tipo é a união de chaves no objeto:Mas você provavelmente não quer ter que escrever
MyObjectType<"a" | "b">
sozinho. Isso significa que você desejará uma função auxiliar genérica para inferir o argumento de tipo para você:Agora, em vez de
const o: MyObjectType = {⋯}
, você escreveconst o = myObjectType({⋯})
. É quase a mesma quantidade de trabalho para você, mas oferece o comportamento desejado:Link do Playground para o código