Я экспериментировал с машинописным текстом и библиотекой fp-ts. Я хотел создать свою собственную «монаду», действующую на определенные значения. Код, который я придумал, следующий:
import { type Once, fromNullable, left, isRight, FlatMapNullable } from "fp-ts/lib/Either"; тип импорта { FragmentError } из "./fragmentError"; функция экспорта TransformToFragment( fn: (...args: A) => T, SafeTransform: логическое значение = ложь, customErrorMessage: string = "Нет специального сообщения"): (...args: A) => Once { const nullFragmentError = { errorOrigin: fn.name, errorType: «Нулевое значение», errorMessage: "fromNullable обнаружил нулевое значение при запуске исходной функции", customErrorMessage: customErrorMessage ?? "", аргументы: ``, stackTrace: новая ошибка().стек! } const nullErrorConstructor = fromNullable(nullFragmentError); вернуть безопасное преобразование? () => { пытаться { const res = nullErrorConstructor(fn()); вернуть isRight (рез)? рез: слева (nullFragmentError); } поймать (ошибка) { const e = ошибка как ошибка; вернуться налево({ errorOrigin: fn.name, errorType: «Ошибка фрагмента», errorMessage: электронное сообщение, аргументы: ``, customErrorMessage: customErrorMessage ?? "", stackTrace: e.stack! }) } } : () => nullErrorConstructor(fn()); } Я хочу получить функцию и преобразовать ее во что-то, что возвращает ее значение или собственный тип ошибки, если произойдет что-то неожиданное. Мой код работает. Проблема в том, что часть ts-ignore. Когда я пытаюсь выполнить проверку машинописного текста, он говорит:

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