![](/img/trans.png)
[英]How to detect wrong function call to a typescript function, from a js file [TypeScript, Vue, js]
[英]How to call js function from a typescript-file?
我有一個javascript文件,其中包含一個包含ajaxcall的函數。 我試圖從我的打字稿文件中調用該函數。 我猜它,因為我沒有聲明類型,但我不知道如何寫這個?
我嘗試添加一些類型聲明,但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;}'。“
這是我的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;
}));
});
};
最簡單的方法是斷言scp.network
類型any
使transpiler跳過檢查的屬性scp.network
:
(scp.network as any).getJsonNoCache(...)
如果你想讓它更加類型正確,你可以為scp declare
類型:
declare var scp: {
network: {
getJsonNoCache: (
url: string,
query: Record<string, string | number>,
onSuccess?: (data: any) => void,
onError?: (error: any) => void,
) => void;
};
};
上面的代碼告訴TypeScript轉換器,你的運行時有一個像這樣的類型的全局變量scp
,然后轉換器可以從聲明中判斷並檢查類型的正確性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.