我有一个javascript文件,其功能包含ajaxcall。我试图从我的打字稿文件中调用该函数。我猜是因为我没有声明类型,但是我不确定如何写呢?
我试图添加一些类型声明,但是Visual Studio仍然抱怨getJsonNoCache
。我收到错误
“错误TS2339(TS)属性'getJsonNoCache'在类型'{ postJson(URL:字符串,命令:任何,onSuccess ?:任何,onError ?:任何): 虚空getJson(URL:字符串,查询:任何,onSuccess ?:任何,onError ?: 任何):无效; }'。”
这是我的javascript文件,它作为捆绑软件包含在我的网站中。
scp.network.getJsonNoCache = function(url, query, onSuccess, onError, statusCodeEvents) {
$.ajax({
contentType: 'application/json; charset=utf-8',
type: "GET",
url: url,
data: query,
cache: false,
statusCode: {
401: function() {
window.location = '/';
},
405: function() {
rfq.mainModel.errorHeader('Information');
}
},
success: function(data) {
if (onSuccess !== undefined)
onSuccess(data);
},
error: function(data) {
if (onError !== undefined) {
onError(data);
}
},
dataType: "json",
});
};
这是我的ts文件中的函数,我正试图调用该函数。
this.getUsers = (callback: any, text: string) => {
if (text.length < 2) {
callback([]);
return;
}
scp.network.getJsonNoCache(audit.queries.GET_INTERNAL_USERS, {
searchText: text,
maxCount: 10,
roleId: 5
}, function(data: any) {
this.queriedUsers = data.users;
console.log(data.users);
callback(_.map(this.queriedUsers, function(user: any) {
return user.name;
}));
});
};
答案 0 :(得分:3)
最简单的方法是将scp.network
声明为类型any
,以使编译器跳过对scp.network
属性的检查:
(scp.network as any).getJsonNoCache(...)
如果要提高类型的正确性,可以declare
键入scp:
declare var scp: {
network: {
getJsonNoCache: (
url: string,
query: Record<string, string | number>,
onSuccess?: (data: any) => void,
onError?: (error: any) => void,
) => void;
};
};
上面的代码告诉TypeScript transpiler您的运行时具有一个全局变量scp
,其类型类似于这样,然后transpiler可以从声明中进行判断并为您检查类型的正确性。