簡體   English   中英

打字稿:如何聲明具有從 IIFE 返回的自定義屬性的函數的類型

[英]Typescript: How to declare the type for a function with custom properties that is returned from an IIFE

說我有一個這樣的對象

const someObject: SomeObject = {
  someMethod: (function() {
    function mainMethod(x) {return x+1}
    yolo.subMethod = function(x) { return x-1 }

    return mainMethod;
  })()
}

我嘗試像這樣定義它的類型:

type SomeObject = {
  someMethod: {
    (x:number): number
    subMethod(x:number): number
  }
}

但是我得到Parameter 'x' implicitly has an 'any' type. IIFE 中所有內容中的警告,這意味着我的類型未應用。

我已經閱讀了這個類似的答案,但它似乎不起作用。

我對 TS 很陌生,我還不熟悉諸如此類的更復雜的用例,因此非常感謝任何幫助。

上下文類型(其中 TS 根據預期類型推斷參數類型)有其局限性。 其中之一是必須將函數直接分配給類型化引用。 由於mainMethod在聲明時未在任何地方直接分配,因此不會從上下文類型中受益。 它將在return檢查,但不會根據上下文鍵入。

您必須向函數顯式聲明參數類型。 如果你想讓事情保持干燥,你可以定義與推斷的常量類型相關的類型:

const someObject = {
    someMethod: (function () {
        function mainMethod(x: number) { return x + 1 }
        mainMethod.subMethod = function (x: number) { return x - 1 }

        return mainMethod;
    })()
}

type SomeObject = typeof someObject

游樂場鏈接

暫無
暫無

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

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