![](/img/trans.png)
[英]How to define a Typescript type that will only accept instances of some user defined class
[英]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
,您也會同時排除method
和funcProp
:
type SomeStuff = ExcludeFunctionProps<Stuff>;
// type SomeStuff = {name: string}
所以要小心。 希望有所幫助; 祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.