javascript - 如何从打字稿文件中调用 js 函数?
问题描述
我有一个包含 ajaxcall 的函数的 javascript 文件。我试图从我的打字稿文件中调用该函数。我猜是因为我没有声明类型但我不确定如何写这个?
我尝试添加一些类型声明,但 Visual Studio 仍然抱怨getJsonNoCache
. 我得到错误
“错误 TS2339 (TS) 属性 'getJsonNoCache' 在类型 '{ postJson(url: string, command: any, onSuccess?: any, onError?: any): void; getJson(url: string, query: any, onSuccess?: any, onError?: any): void; }'。”
这是我的 javascriptfile,它作为捆绑包包含在我的网站中。
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;
}));
});
};
解决方案
最简单的方法是 assert scp.network
as typeany
以使编译器跳过检查以下属性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 转译器你的运行时有一个scp
像这样类型的全局变量,然后转译器可以从声明中告诉你并检查类型的正确性。
推荐阅读
- javascript - 使用 JQuery 获取 SELECT 的选定选项文本
- javascript - 理解 Typescript 中的 React EventHandlers
- python - 获取时间戳在不规则时间间隔 pandas 内的行(时间序列)
- laravel - 请求关于在 Laravel 中接收令牌错误的指导
- python - 为什么 python lambda 看到的是一个系列而不是一个值?
- java - Springboot URl 映射
- jquery - 在 ASP.NET Core 中的下拉值更改时从数据库中获取值
- c - 使用 pthread 库在线程之间进行同步
- python - 如何计算数据集的元素由列表组成
- python - 如何使用 pyodbc 在嵌套循环中调用不同的查询