knockout.js - Use Typescript para descrever uma classe com propriedades adicionadas dinamicamente
Estou tentando adicionar definições de Typescript a uma base de código existente que por acaso usa a biblioteca Knockout. O código contém um padrão muito comum que se parece com isto:
interface SomeProperties {
// A bunch of properties
}
class ViewModel {
// Some properties of my own...
constructor(data: SomeProperties) {
AddAllPropertiesToThis(data);
}
}
Onde AddAllPropertiesToThis pega o objeto de dados e adiciona dinamicamente todas as suas propriedades a this.
Não consigo descobrir como expressar esse padrão em Typescript. Faz sentido dizer algo como
class ViewModel implements SomeProperties
mas isso requer copiar manualmente todas as propriedades da definição da interface para a classe.
Existe alguma maneira de realizar o que preciso fazer aqui sem ter que digitar propriedades redundantes?
Resposta #1
Você poderia introduzir uma variável membro data: SomeProperties no ViewModel.
interface SomeProperties {
// A bunch of properties
}
class ViewModel {
data: SomeProperties;
constructor(data: SomeProperties) {
// deep copy the data
this.data = { ...data };
}
}
Para mim, faz mais sentido fazer isso por meio de composição como o código acima, em vez de herança. O ViewModel contém (tem) SomeProperties. Ele não é uma extensão de SomeProperties (relação "é um").
