#typescript #generics #jsdoc
#typescript #общие #jsdoc
Вопрос:
Я написал функцию-оболочку memoize
, которая кэширует результаты функции по ее аргументам. Я бы хотел, чтобы подсказка типа для обернутой функции отображала исходные документы.
Вот что в настоящее время показывает подсказка типа:
И вот как я объявил свой Memoized
тип:
/**
* Functions that match this type can be memoized.
*/
type Memoizable = (...args: any[]) => any;
/**
* The memoized function.
*/
interface Memoized<T extends Memoizable> {
/**
* Memoized function that caches its results by a key built from its arguments.
*/
(...args: Parameters<T>): ReturnType<T>;
/**
* The cache from which memoized items are retrieved.
*/
readonly cache: Map<string, ReturnType<T>>;
}
Поэтому вместо документации для Memoized
я хочу показать документацию для моей функции test
. Я предполагаю, что мне нужно объявить Memoized
по-другому. Чего мне не хватает?
Ответ №1:
Оказывается, решение состояло в том, чтобы объявить Memoized
следующим образом:
/**
* Memoized function that exposes its cache.
*/
type Memoized<T extends Memoizable> = T amp; Memo<T>
/**
* A memoized function exposes its cache as a read-only attribute.
*/
interface Memo<T extends Memoizable> {
/**
* The cache from which memoized items are retrieved.
*/
readonly cache: Map<string, ReturnType<T>>;
}
Теперь подсказка типа выглядит следующим образом: