Skip to content

reject any-typed solutions in six type-driven lessons - #364

Merged
fey merged 1 commit into
mainfrom
fix/357-tighten-type-matchers-v2
Aug 14, 2026
Merged

reject any-typed solutions in six type-driven lessons#364
fey merged 1 commit into
mainfrom
fix/357-tighten-type-matchers-v2

Conversation

@fey

@fey fey commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Closes #357

Замена #362: тот PR стоял на ветке #358 и закрылся вместе с её удалением при мерже. Коммит тот же, перенесён на main.

Что сделано

Шесть уроков из списка issue: во всех тип и есть ответ, и во всех он целиком лежит внутри // BEGIN … // END.

урок что добавилось к проверке
40-generics/20-generic-types параметры add()/has() ровно [T], возвращаемые типы number и boolean
40-generics/30-generic-functions параметры и возврат push(), сигнатура колбека filter(), возврат filter() как MyArray<T>
50-objects/30-mapped-types результат sanitize() ровно Omit<T, K>, а не «что-то, что его включает»
50-objects/35-mapping-modifiers результат deepFreeze() ровно DeepReadonly<T>
50-objects/45-record параметры возвращаемой функции ровно [Roles, Resource], возврат boolean
25-types/70-variability Transaction['apply'] принимает и возвращает number, balance число, applyTransactions() возвращает число

35-interfaces/20-interface-using не тронут: там toExtend выражает отношение подтипа, а не равенство, и это правильный матчер.

Тексты заданий

Ужесточение добавило требование там, где текст его не называл, — в двух уроках, и текст дописан в обеих локалях:

  • 20-generic-types — раньше было просто «Тип включает в себя два метода: add() и has()»; теперь названы тип аргумента и возвращаемые значения;
  • 45-record — раньше про типы возвращаемой функции не было ничего, только пример вызова.

В остальных четырёх текст уже описывал то, что тест теперь требует: 30-generic-functions перечисляет параметры колбека и возвращаемые значения, 30-mapped-types прямо говорит «в выходном типе также не должно быть этих полей», 35-mapping-modifiers — про неизменяемость вложенных объектов, 70-variability — про числовой баланс.

Проверка

Каждый урок прогнан командой платформы (bin/test2.sh) с подменённым index.ts. Ослабленное решение — аннотации заменены на any, для 30-mapped-types и 35-mapping-modifiers вместо этого возвращается исходный T без Omit/readonly:

урок ослабленное решение
20-generic-types отвергается
30-generic-functions отвергается
30-mapped-types отвергается
35-mapping-modifiers отвергается (Unused '@ts-expect-error' directive)
45-record отвергается
70-variability отвергается

До этой правки все шесть проходили.

Эталонные решения проходят: make check зелёный целиком — description-lint, code-lint, schema-validate, type-check и все 54 урока.

Что осталось за рамками

Остальные 14 уроков с toExtend из тех 20: там либо проверяемая сигнатура лежит вне редактируемой области (10-basics/30-variables, 25-types/40-assignability), либо ужесточение требует переписать формулировку задания сильнее, чем стоит делать задним числом (25-types/25-literal-types, 10-basics/60-enums и другие из разбора в issue). Это отдельный разговор с автором курса.

@fey
fey merged commit fa24a82 into main Aug 14, 2026
2 checks passed
@fey
fey deleted the fix/357-tighten-type-matchers-v2 branch August 14, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ужесточить тип-проверки уроков: toExtend пропускает решения на any

1 participant