簡體   English   中英

如何從打字稿文件中調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM