我正在嘗試派生一個類以將欄位設定為可選,該欄位在基類中是必需的。
例如
class Base {
param1! : string;
param2! : string;
}
class Derived extends Omit<Base, "param1">{
}
這會導致錯誤 ts(2693):
'Omit' 僅指一種型別,但在這里用作值。
如果這是一個 XY 問題,我真正想要解決的是:
- 我已經生成了在每次構建時都會重新生成的類(所以我不能手動修改它們,或者在生成時做一些包含修改的事情)
- 生成的類將所有屬性定義為必需(類似于
Base上面)。 - 我需要為一些生成的方法和屬性添加裝飾器。
- 我需要允許
Partial基類的實體。(理想情況下只添加一次裝飾器)。
理想情況下,我會擴展 Base 類,使用Required, Omit, Pick,Partial以便派生多個省略/需要正確屬性的類。
我幾乎已經放棄了所有這些腳手架/樣板的東西,并想手動寫出模型/sql/REST。
(我是打字稿的新手)
uj5u.com熱心網友回復:
TS 有兩個范圍(世界)。第一個是運行時值,第二個是型別。根據 JS 規范和檔案
該
extends關鍵字可用于子類化自定義類以及內置物件。
這意味著,在 之后extends,TypeScript 和 JavaScript 都期望運行時值。這就是您收到錯誤的原因,因為Omit是純型別,它在編譯期間被洗掉。Omit在這種情況下使用與純 javascript 等效:
class Derived extends {
}
這種語法是錯誤的。相反,您需要使用implements. TH 這個關鍵字來自型別范圍,幫助 TS 驗證類宣告。
class Base {
param1!: string;
param2!: string;
}
class Derived implements Omit<Base, "param1">{
param2!: string;
}
關于,裝飾師。請提供帶有裝飾器的最小可重現示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/488784.html
