typescript 2.0: параметры со значениями по умолчанию

Адские ребята,

Вот еще один вопрос машинописного текста 2.0 (с включенным режимом строгой нулевой проверки). Итак, если вы определяете функцию, которая имеет значения по умолчанию для всех параметров:

(name = "Luis", age = 40)=>void

Тогда все параметры считаются необязательными, т.е. как будто у нас есть следующая подпись:

(name?: string, age?: number) => void

Верно? Теперь, что происходит, когда у нас есть эта подпись:

(name = "Luis", age: number ) => void

Согласно коду VS, эта подпись совместима с:

(name: string, age: string) => void

Теперь, если я активирую режим строгой нулевой проверки, не должен ли следующий вызов вызывать ошибку:

doIt(undefined, 30);

Компилируется нормально, но если я не ошибаюсь, undefined будет автоматически добавлен только в список типов необязательных параметров. Я не нашел ссылок на инициализированные параметры по умолчанию.

Итак, если предыдущий вызов в порядке, может ли кто-нибудь указать мне, где я могу найти информацию об этом в официальных документах?

Спасибо,

Луис


person Luis Abreu    schedule 26.10.2016    source источник
comment
Какова точная подпись doIt(), которая, по вашему мнению, должна вызывать сбой компиляции?   -  person Dan Def    schedule 27.10.2016
comment
Привет Дэн. ну, в моем случае doIt будет чем-то вроде этой функции doIt(name = Luis, age: number) { .... }.   -  person Luis Abreu    schedule 27.10.2016
comment
Это объясняет, почему не было ошибки времени компиляции, но я вижу, что @basarat уже объяснил почему :)   -  person Dan Def    schedule 28.10.2016


Ответы (1)


Краткое примечание: вы не можете указать значения по умолчанию только в подписях, например. следующая ошибка:

declare var foo: (name = "Luis", age = 40) => void; // ERROR: defaults only allowed in implementation

Продолжая следующий код:

var foo = (name = "Luis", age: number) => null;
foo(undefined, 123);
foo(null, 123); // ERROR 

Показывает, что name совместим с string или undefined. Подсказка неверна, но общий анализ верен.

Не стесняйтесь поднимать вопрос на странице https://github.com/Microsoft/TypeScript/issues.

person basarat    schedule 27.10.2016