Ответ 1
Да, такое поведение может быть достигнуто, но несколько иначе. Вам просто нужно использовать интерфейс typescript, например:
interface IValue {
prop: string
}
interface MyType {
[name: string]: IValue;
}
который будет использоваться, например, как:
var t: MyType = {};
t['field1'] = { prop: null };
t['field2'] = new DifferentType(); // compile-time error
...
var val = t['field1'];
val.prop = 'my prop value';
Вам не нужно создавать класс typescript. Все, что вам нужно, это обычный javascript-объект (в этом случае {}) и заставить его реализовать интерфейс MyType, поэтому он ведет себя как словарь и предоставляет вам тип времени компиляции безопасность.