Skip to content

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

Closed
fey wants to merge 1 commit into
fix/344-enable-type-checkingfrom
fix/357-tighten-type-matchers
Closed

reject any-typed solutions in six type-driven lessons#362
fey wants to merge 1 commit into
fix/344-enable-type-checkingfrom
fix/357-tighten-type-matchers

Conversation

@fey

@fey fey commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Closes #357

Основан на ветке #358 — проверка типов должна работать, иначе ужесточение матчеров ничего не меняет. Базу переключит на main сам GitHub после мержа #358.

Что сделано

Шесть уроков из списка 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 deleted the branch fix/344-enable-type-checking August 14, 2026 12:44
@fey fey closed this Aug 14, 2026
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.

1 participant