Вывести тип ключей объекта

Возможно ли в TypeScript объявить структуру так, чтобы выводился тип function, назначенного ключу error в jQuery.ajax? Затем мы можем сообщить о несоответствии типов, если кто-то попытается присвоить неправильную сигнатуру функции.

$.ajax({
    type: "POST",
    url: listUrl,
    jsonp: 'jsonp',
    dataType: "jsonp",
    success: OnSuccesCall,
    error: OnErrorCall
});

function OnErrorCall(jqXHR, textStatus, errorThrown) {
    ...
}

person Carl in 't Veld    schedule 22.10.2015    source источник
comment
Разве вы не используете jquery.d.ts, если он уже определяет его как success? (data: any, textStatus: string, jqXHR: JQueryXHR): any; и error?(jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any; в JQueryAjaxSettings   -  person PSL    schedule 22.10.2015
comment
github.com/borisyankov/DefinentyTyped/blob/master/jquery/   -  person PSL    schedule 22.10.2015


Ответы (1)


Это должно быть сделано для вас уже в ограниченной степени (ограничено определение, которое вы используете, и jQuery API, который полон дополнительных возможностей).

var listUrl = 'http://www.example.com/';
function OnSuccessCall (data, thing: boolean, another: boolean) {
    // implementation
}

function OnErrorCall () {
    // implementation
}

$.ajax({
    type: "POST",
    url: listUrl,
    jsonp: 'jsonp',
    dataType: "jsonp",
    success: OnSuccessCall,
    error: OnErrorCall
});

В приведенном выше примере OnSuccessCall приведет к тому, что TypeScript выдаст предупреждение, поскольку у него нет сигнатуры, совместимой со свойством успеха, которое ожидает (data:any, textStatus: string, jqXhr: JQueryXHR) => any.

Обратите внимание, что вы можете предоставить функцию, которая пропускает любой из них, и она будет совместимой (потому что вам не нужно ничего делать с переданным аргументом).

person Fenton    schedule 22.10.2015
comment
Теперь я понимаю. Конечно, я получаю сообщение об ошибке только тогда, когда вводю типизацию в параметры, как показал @ Steve-Fenton. Однако ошибка не очень полезна: Error 2119 Argument of type '{ [x: number]: undefined; type: string; url: string; jsonp: string; dataType: string; success: (d...' is not assignable to parameter of type 'string'. <path omitted>test.ts 142 16 test.ts В идеале можно легко исправить неправильную подпись. Любые идеи? - person Carl in 't Veld; 30.10.2015