簡體   English   中英

如何定義 Typescript 部分類型以僅接受屬性

[英]How to define Typescript Partial type to accept only properties

使用打字稿 3.7。 我有這堂課

class Thing {
  name: string;
  age: number;

  serialize() {}
}

現在在另一種方法中,我想聲明一個參數是 Thing 的一部分,但應該只包含屬性,而不是類。 所以我希望接受的類型是

{name: string, age: number}

這可能嗎? 當我使用Partial<Thing> ,也接受了我不想要的方法serialize

這個重復問題的答案顯示了如何使用條件類型以及映射類型查找類型來從對象中提取匹配特定標准的屬性。 在你的情況下,我會這樣做:

type ExcludeFunctionProps<T> =
    Omit<T, { [K in keyof T]-?: T[K] extends Function ? K : never }[keyof T]>

type AcceptedType = ExcludeFunctionProps<Thing>;
/*
type AcceptedType = {
    name: string;
    age: number;
}
*/

如果需要,您可以使用Partial<AcceptedType> 這里需要注意的是,編譯器無法真正區分方法函數值屬性之間的區別。 所以如果你有一個像

class Stuff {
    name: string = "";
    method() { }
    funcProp: () => void = () => console.log("oops");
}

那么即使funcProp是“字段”或“屬性”而不是method ,您也會同時排除methodfuncProp

type SomeStuff = ExcludeFunctionProps<Stuff>;
// type SomeStuff = {name: string}

所以要小心。 希望有所幫助; 祝你好運!

代碼鏈接

暫無
暫無

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

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