簡體   English   中英

typescript 中的什么類型應該用於在編譯時字段未知的對象?

[英]What type in typescript should be used for objects whose fields are not known at compile time?

我有以下 function:

const doSomething = (param: object) => {
  // path param to another function/library
}

關鍵是我知道(並且想要強制執行) param是 object,而不是原始類型。 在 typescript object 履行了這個角色。

但是我注意到:

const a: object = {
  test: 5
}
console.log(a.test)

給出 typescript 錯誤: Property 'test' does not exist on type 'object'. 這是否意味着object只能用於空對象?

我想知道在 typescript 中聲明 object 變量的最佳做法是什么,其中 object 的確切字段在編譯時不知道。 我注意到:

const b: Record<string, any> = {
    test: 5
}

console.log(b.test)

不會導致錯誤。 那么Record type 應該是首選而不是object嗎?

Typescript 操場鏈接

我認為兩種解決方案可能是將該參數聲明為記錄,或者在運行時檢查類型並在參數不是 object 時拋出異常。

對於第一種方法,您可以這樣做:

const doSomething = (param: Record<string, any>) => {
  // path param to another function/library
}

對於第二種方法,您可以這樣做:

const doSomething = (param: any) => {
if(typeof param !== 'object') throw new Error("Not an object")
  // path param to another function/library
}

但是,我不得不說,如果這個參數來自您自己的代碼之外(如在框架中左右),您將不會編譯該參數,因此您的編譯時錯誤將不存在。 如果你自己的代碼中確實聲明了 object,那么在代碼設計良好的情況下通常不會遇到這種問題。

必須繞過遍布各處any TS 類型檢查,這對您來說是一個很大的缺點。 也許有了更多的上下文,我們可以找出設計中可以改變的地方,這樣你就不必處理這個了:)

暫無
暫無

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

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