Realmente depende do que você está tentando fazer. Tipos são documentação em texto datilografado, então você deseja mostrar a intenção sobre como isso deve ser usado quando você está criando o tipo.
Opção 1: se os usuários podem ter alguns, mas não todos os atributos durante sua vida
Tornar todos os atributos opcionais
type User = {
attr0?: number
attr1?: string
}
Opção 2: se variáveis contendo usuários podem começar nulas
type User = {
...
}
let u1: User = null;
Embora, realmente, aqui se o objetivo for declarar o objeto Usuário antes que ele possa ser conhecido o que será atribuído a ele, você provavelmente deseja fazer let u1:Usersem qualquer atribuição.
Opção 3: o que você provavelmente deseja
Na verdade, a premissa do texto datilografado é certificar-se de que você está em conformidade com o modelo mental que delineou em tipos para evitar cometer erros. Se você quiser adicionar coisas a um objeto uma por uma, este é um hábito que o TypeScript está tentando fazer com que você não faça.
Mais provavelmente, você deseja criar algumas variáveis locais e, em seguida, atribuir à variável que contém o usuário quando ela estiver pronta para ser um usuário completo. Dessa forma, você nunca ficará com um usuário parcialmente formado. Essas coisas são nojentas.
let attr1: number = ...
let attr2: string = ...
let user1: User = {
attr1: attr1,
attr2: attr2
}
userser do tipoUser | {}ouPartial<User>ou precisa redefinir oUsertipo para permitir um objeto vazio. No momento, o compilador está dizendo corretamente queusernão é umUser.