Это выражение не вызывается. Тип «Строка» не имеет сигнатур вызовов. - PullRequest
0 голосов
/ 24 апреля 2020

В моей функции Typescript, когда я устанавливаю аннотацию типа на String, я получаю сообщение об ошибке «Это выражение не может быть вызвано Тип« String »не имеет сигнатур вызовов». как видно из кода ниже.

function IssuerCall<T>(setIssuerCallState: string ){

    return Axios.request({
        method: 'get',
        url:'https://jsonplaceholder.typicode.com/todos/',//'https://jsonplaceholder.typicode.com/todos/'
    }).subscribe(
        response => {
            console.log(response);
            setIssuerCallState({ message: response.status });
        },
        error => {
            console.log(error);
            setIssuerCallState({ message: '404' });
        }
    );

}

Однако, если я установлю тип на Any, у меня не возникнет проблем. Как видно из кода ниже. Я все еще обнимаю TypeScript, так что любая обратная связь будет принята.

function IssuerCall<T>(setIssuerCallState: any ){

    return Axios.request({
        method: 'get',
        url:'https://jsonplaceholder.typicode.com/todos/',//'https://jsonplaceholder.typicode.com/todos/'
    }).subscribe(
        response => {
            console.log(response);
            setIssuerCallState({ message: response.status });
        },
        error => {
            console.log(error);
            setIssuerCallState({ message: '404' });
        }
    );

}

Эта функция затем вызывается в функциональном компоненте React с Redux, как показано ниже:

const [issuerCallState, setIssuerCallState] = useState({ message: ''});
    function testCall(){
        IssuerCall(setIssuerCallState);
    };

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

setIssuerCallState - это функция, поэтому установка ее в виде строки приведет к ошибке String 'не имеет сигнатур вызова.

Попробуйте установить тип setIssuerCallState как setIssuerCallState: (параметр: любой) => void

function IssuerCall<T>(setIssuerCallState: (param: any) => void ){

return Axios.request({
    method: 'get',
    url:'https://jsonplaceholder.typicode.com/todos/',//'https://jsonplaceholder.typicode.com/todos/'
}).subscribe(
    response => {
        console.log(response);
        setIssuerCallState({ message: response.status });
    },
    error => {
        console.log(error);
        setIssuerCallState({ message: '404' });
    }
);
}
0 голосов
/ 24 апреля 2020

Вы ввели setIssuerCallState в виде строки. И вы не можете вызвать строку.

Вы в основном делаете:

const aString = "a string"
aString() // error

Похоже, правильный тип для этой функции будет:

function IssuerCall(setIssuerCallState: (newState: { message: string }) => void) {
   //...
}

Сейчас setIssuerCallState типизируется как функция, которая принимает единственный аргумент, являющийся объектом со свойством message.

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