Pouvez-vous étendre dynamiquement un type en tapuscrit?

En javascript, vous pouvez le faire:

function Test() {
  this.id = 1;
};

Test.prototype.customize = function(key, callback) {
  this[key] = callback;
};

var callback = function() { alert(this.id); };
var x = new Test();
x.customize('testing', callback);
x.testing();

Pouvez-vous faire quelque chose de similaire à la machine?

En particulier, je suis intéressé à avoir une classe comme:

class Socket {
  ...
}

class Sockets {

  public addChannel(name:string):void {
    this[name] = new Socket(); 
  }

  ...
}

data = new Sockets();
data.addChannel('video');
data.addChannel('audio');

...

var audio = data.audio.read();
var video = data.video.read();
etc.

Le compilateur se plaint qu'il n'y a pas de "audio" ou "vidéo" sur "Sockets", et ne compile pas. Est-il un moyen de contourner cela sans avoir à définir manuellement les propriétés de la classe container?

Je sais que ce genre de marches de côté les règles de typage statique, mais je le trouve de temps en temps utiles pour les API de la gentillesse pour avoir quelque chose comme cela.

edit: Voir l'exemple de réponse que j'ai posté ci-dessous; quelque chose fonctionne comme ça. Je vais tout de même accepter toute réponse intelligente qui me permet en quelque sorte de gérer de compiler quelque chose qui fait quelque chose d'utile sur la base de l'objet lui-même.

source d'informationauteur Doug