Generi c type как тип возвращаемого значения функции - PullRequest
1 голос
/ 05 августа 2020
• 1000 c тип L. Я немного сбит с толку, почему есть две ошибки, которые указывают на то, что ни undefined, ни number не могут быть присвоены типу L<T>.

Как я могу устранить эти ошибки, сохраняя при этом преимущество вывода result тип?

Заранее спасибо.

1 Ответ

0 голосов
/ 05 августа 2020

Подпись вашего типа указывает, что вызывающий может передать любой тип, расширяющий логическое значение, и ваша функция вернет L параметризованный этого типа . undefined не является «L параметризованным любым типом, который передал вызывающий, что расширяет логическое значение». (Это правда, что логическое значение здесь немного волшебно, и на практике его невозможно расширить, но ваша подпись указывает, что вы этого ожидаете.)

Хотя я бы особо не рекомендовал это функция вообще (передача логического значения часто является признаком проблемы с дизайном, и вам действительно нужно иметь только две функции), если бы я собирался реализовать ее, я бы рекомендовал перегрузки:

function add(n1: number, n2: number, showResult: true): undefined
function add(n1: number, n2: number, showResult: false): number
function add(n1: number, n2: number, showResult: boolean): number | undefined
{
    // Implementation
}

Здесь говорится если вы передадите логическое значение, оно вернет число или неопределенное значение, но если во время компиляции известно, что оно истинно, оно будет неопределенным, а если известно, что оно ложно, это будет число.

...