Машинопись, как объявить функцию, которая возвращает тип наименьшего общего знаменателя? - PullRequest
0 голосов
/ 25 июня 2019

я хочу объявить функцию, которая возвращает общий тип или его расширенный тип

interface Common {
  id: number;
}

interface AdditionalInformation extends Common {
  myname: string;
}

Конечно, функция возвращает объект, содержащий id свойство

и желающийон также может вернуть свойство myname

Я попытался объявить функцию следующим образом:

export class Lib {

  public static lowestCommonDenominator <T extends Common>(): Common {
    const a: Common = { id: 1 };
    return a;
  }

  public static firstCaseFunction(): Common {
    const ok: Common = this.lowestCommonDenominator();
    return ok;
  }

  public static secondCaseFunction(): AdditionalInformation {
    // Property 'myname' is missing in type 'Common' but required in type 'AdditionalInformation'.ts(2741)
    const ko: AdditionalInformation = this.lowestCommonDenominator();
    return ko;
  }

}

Но когда я назначаю функцию расширенному типу, я получаюошибка:

Свойство 'myname' отсутствует в типе 'Common', но требуется в типе 'AdditionalInformation'.ts (2741)

Возможно ли реализовать то, чтоЯ хочу?

1 Ответ

1 голос
/ 25 июня 2019

Этот фрагмент кода устраняет ошибку

export class Lib {
  public static lowestCommonDenominator <T extends Common>(): T {
    const a: Common = { id: 1 };
    return a as T;
  }

  public static firstCaseFunction(): Common {
    const ok: Common = this.lowestCommonDenominator();
    return ok;
  }

  public static secondCaseFunction(): AdditionalInformation {
     const ko: AdditionalInformation = this.lowestCommonDenominator<AdditionalInformation>();
    return ko;
  }
}
...