![](/img/trans.png)
[英]What return type should be used for setTimeout in 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
嗎?
我認為兩種解決方案可能是將該參數聲明為記錄,或者在運行時檢查類型並在參數不是 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.