У меня есть немного кода, который должен работать, но я понимаю, что это происходит не потому, что сигнатуры конструктора различаются для типов.Тип производного типа типа не принимается как его собственный базовый тип
Пример:
module test {
export class A {
constructor(a: string, b: string) { }
static doSomething(a: typeof A): number { return 0; }
}
}
module test {
export class B extends A {
constructor() { super("0", "1"); }
}
export class C extends B {
static n = A.doSomething(C);
x: number;
constructor(c: C) { super(); }
}
}
«A.doSomething (С)» терпит неудачу, потому что конструкторы не совместимы между типами (потому что одно значение типа должны надлежащим образом представлять два типа в случае «новый» используется) , Я знаю ПРИЧИН, почему, но нет способа (кроме утиного набора) указать конкретный базовый тип? Если нет, это большое ограничение в моих книгах, и там должно быть «baseof», кроме просто «typeof». Если требуется утиная печать, тогда ответ просто «нет». ;)
Это выглядит хорошо с одним методом, но не хорошо, если кто-то, как ожидается, сохранить интерфейс в синхронизации с большим классом. Дело было в сокращении работы, а не в добавлении к ней. ;) Кроме того, как я уже говорил, использование интерфейсов похоже на утиную печать, о чем я уже говорил. Похоже, что использование является лучшим и самым быстрым решением и может быть легко изменено на сильный тип с использованием «», если потребуется. Решение, которое я выбрал, на самом деле заключалось в том, чтобы конструкторы принимали первый параметр как тот же, а остальные - необязательные для производного типа. –
Просто чтобы добавить, в моем фактическом классе есть много частных переменных, и мне нужно, и интерфейсы (утиная печать) означает, что любой объект, который соответствует ему, может быть передан, но он потерпит неудачу.Решение должно блокироваться с фактическим типом класса, а не с интерфейсом (во всяком случае, в моем случае). –