簡體   English   中英

命名空間類的打字稿定義

[英]Typescript definitions for namespaced classes

我正在嘗試為我編寫的JavaScript庫編寫打字稿def。 該庫看起來像:

!function() {
  var mylib = {};

  mylib.Fruit = function() {
    // ...
  };
  mylib.Fruit.SOME_STATIC_PROP = 1;

}();

源由多個串聯的文件組成-在此最小示例中,前一個文件包含前兩行,一個文件包含Fruit ,另一個文件包含最后一行。

fruit.d.ts:

declare module mylib {
  class Fruit {
    static SOME_STATIC_PROP: number;
  }
}

在fruit.js(這又只是上面粘貼的代碼的中間部分)中,Intellisense抱怨:

類型“()=>任何”不能分配給“類型水果”。 類型(()=> any)中缺少屬性'SOME_STATIC_PROP'。

編輯在我的串聯文件中(例如,上面粘貼的內容),我沒有收到該消息。

如果我將fruit.js更改為

function Fruit() { ... }

沒有mylib命名空間,也沒有錯誤。

有沒有辦法避免在我的個人“類”文件中發生此錯誤,還是應該忽略它們?

我的猜測是您需要更新函數聲明,如下所示:

!function() {
  var mylib = {};

  mylib.Fruit = function():Fruit {
    // ...
  };
  mylib.Fruit.SOME_STATIC_PROP = 1;

}();

您沒有告訴編譯器函數將返回什么,因此它假定它是'any'並且any沒有屬性SOME_STATIC_PROP,但是Fruit類型確實具有該屬性。

告訴編譯器函數返回的確切類型,應該讓它滿意。

在fruit.js(這又只是上面粘貼的代碼的中間部分)中,Intellisense抱怨

因為這是JavaScript,所以錯誤Type '() => any' is not assignable to type 'typeof Fruit'. Property 'SOME_STATIC_PROP' is missing in type '() => any'. Type '() => any' is not assignable to type 'typeof Fruit'. Property 'SOME_STATIC_PROP' is missing in type '() => any'. 基於變量的推斷類型。

解決方案:

或者:

  • .js文件轉換為.ts以便您可以使用類型注釋類型斷言來隨意調整類型
  • 忽略錯誤是.js文件,然后繼續操作,直到有時間轉換為.ts為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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