introduce as const through immutability in the type-hierarchy theory - #361
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #312
Что было не так
В теории «Иерархия типов»
as constвводился как способ передать ровно два числа вMath.atan2():Замечание из фидбека справедливо: здесь
as constрешает проблему арности, а не неизменяемости. Естественный инструмент для этой задачи — аннотация кортежем,const args: [number, number] = [8, 5]. Студент видит приём в контексте, где приём не самый уместный.Вдобавок этот же пример со спредом уже разобран раньше, в
20-functions/80-rest-spread, и тамas constподан ровно так же. То есть урок иерархии типов повторял чужой пример, а свою тему — нисходящее приведение — им не иллюстрировал.Что стало
Начало раздела не тронуто:
const args = [8, 5]с ошибкой на спреде остаётся, потому что это хорошая демонстрация неявного восходящего приведения — компилятор расширил[8, 5]доnumber[].Дальше развилка вместо одного ответа:
args[0] = 100проходит), и тип элемента остаётсяnumber;as const, и вот это уже нисходящее приведение:readonly [8, 5]вместоnumber[], запись отвергается.Заканчивается раздел явным противопоставлением, которого раньше не было: аннотация кортежем называет нужный тип,
as constзапрещает компилятору расширять уже написанное.Пересечения с
25-types/25-literal-typesнет: тамas constпоказан на объекте конфигурации, здесь — на сужении типа массива, и мотив назван через иерархию множеств, а не через «неизменяемость» вообще.Проверка
Компилятором (typescript 6.0.3,
--strict):const args: [number, number] = [8, 5]+ спред +args[0] = 100const args = [8, 5] as const+args[0] = 100TS2540: Cannot assign to '0' because it is a read-only property.Текст ошибки в комментарии совпадает с тем, что печатает компилятор.
make description-lintиmake schema-validateзелёные. Задание урока и решение учителя не тронуты, раздел про восходящее/нисходящее приведение сохранён.