Функция, которая принимает меньше аргументов, может быть помещена вместо функции, которая принимает больше, и аналогично функция, которая принимает аргументы с более широкими типами, может быть помещена вместо функции, которая принимает более узкие типы. ( Документация )
В частности, в этом случае (value: unknown) => void
может принимать 2 параметра, а поскольку value
равно unknown
, он должен иметь возможность обрабатывать value
из введите Mine
.
Типичный пример его использования - .map
. .map((v: unknown) => `${v}`)
работает, хотя map
также имеет аргумент для индекса и аргумент для исходного массива.
Если жизненно важно, что вы не можете случайно не включить тип, вы можете вместо этого использовать класс со свойствами вместо аргументов и основной метод, который не принимает аргументов:
abstract class OnChange {
private field: Mine;
private value: unknown;
public constructor (field: Mine, value: unknown) { this.field = field; this.value = value; }
public abstract main(): void;
}
Это кажется Хотя, похоже, больше проблем, чем оно того стоит, поэтому я бы просто использовал функции с сужающимися аргументами, как и было задумано.