Каков тип возврата функции, которая возвращает себя? - PullRequest
1 голос
/ 16 марта 2020
setInterval(
    (function func() /* :() => ??? */ {
        console.log(`I will be invoked immediately!`);

        return func;
    })(),
    10000
);

Приветствие, я новичок в Typescript.

Раньше я использовал setInterval() таким образом в JS, чтобы я мог немедленно вызвать функцию обратного вызова setInterval() вместо ожидания за 10 секунд до первого запуска. Однако, когда я перешел в TS, я не знаю, что здесь указывать в качестве возвращаемого типа. Я пытался использовать any как () => any, но кажется, что это может нарушить правило @ typescript-eslint : Missing return type on function.eslint(@typescript-eslint/explicit-function-return-type).

Кто-нибудь может дать мне какой-нибудь совет? Заранее спасибо.

ps Я знаю, как я использую setInterval(), возможно, не очень хорошо, но я просто хочу избавиться от этого.

Ответы [ 2 ]

3 голосов
/ 16 марта 2020

Вы можете определить его точно так, как его определяет TS: typeof func.

function func(): typeof func { ... }

Это явно говорит о том, что функция возвращает функцию с собственной сигнатурой, поэтому она также выразительна.

3 голосов
/ 16 марта 2020

Я бы избегал любого правила lint, которое вызывает явные типы во всех ситуациях, или, по крайней мере, я бы, вероятно, отключил его для этого случая использования.

Если вы оставите функцию как есть, Ts выведет верните тип правильно.

Если вы хотите изложить это, вы можете использовать рекурсивный тип:

type Fn = () => Fn;
setInterval(
    (function func() : Fn {
        console.log(`I will be invoked immediately!`);

        return func;
    })(),
    10000
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...