Самое простое решение - создать функцию JavaScript и вызвать его для обратного вызова Ajax success
.
function callServerAsync(){
$.ajax({
url: '...',
success: function(response) {
successCallback(response);
}
});
}
function successCallback(responseObj){
// Do something like read the response and show data
alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}
function foo(callback) {
$.ajax({
url: '...',
success: function(response) {
return callback(null, response);
}
});
}
var result = foo(function(err, result){
if (!err)
console.log(result);
});
Я знаю, что вы говорите, что это странно, но это одна из основных причин, по которой существует TypeScript. Эта ошибка помогает предотвратить случайную настройку или получение несуществующих свойств для объекта.
Прямо сейчас, как компилятор говорит вам, свойство bar
не существует на x
, поскольку оно неявно набрал {}
при записи var x = {};
.
Вы можете сказать компилятору, что x
имеет больше нуля свойств, явно определяя тип:
var x: { foo?: string; bar?: string; } = {};
Теперь вы могут получить или установить x.foo
и x.bar
без жалобы компилятора. В большинстве случаев вы переместили бы это в такой интерфейс:
interface IFooBar {
foo?: string;
bar?: string;
}
var x: IFooBar = {};
x.foo = "asdf"; // ok
x.test = "asdf"; // error, as it should be
Некоторые люди рекомендуют вам наложить на any
, но не ленитесь. Вы должны в полной мере использовать систему типов, предоставляемую TypeScript. Выполнение этого, безусловно, сэкономит вам время, когда вы будете поддерживать приложение.
x
не имеет никакого свойства с именем bar
, поэтому вам нужно создать его внутри объекта:
function foobar() {
var x = {
foo: 'foo',
bar: 'bar'
}
return x;
}
alert(foobar().bar); //returns bar
Из-за строго типизированного характера объекта Виджета вы можете использовать «any», чтобы сделать его нетипизированным:
var x: any = {};
x.bar = "bar"; /// ok
. Если вам нужно определить тип свойств литерала
var x: { [index: string]: TypeA } = {};
, тогда x["bar"]
теперь может быть только экземпляром TypeA.