簡體   English   中英

打字稿:從通用接口中省略屬性

[英]Typescript: Omit property from a generic interface

我正在嘗試創建一個省略給定類型的屬性的接口。 為此,我使用了Omit導致 Type 所以它的定義是錯誤的。 但是,如果它不是通用接口,它就可以完美運行。

考慮以下示例。

interface IBaseType {
  prop1: number;
  prop2: string;
  match: boolean;
}

interface OmitMatchNoGeneric extends Omit<IBaseType, "match"> {}

interface OmitMatch<T extends { match: any }> extends Omit<T, "match"> {}

function test(genericArg: OmitMatch<IBaseType>, nonGenericArg: OmitMatchNoGeneric) {
  nonGenericArg.prop1 = 5; // the properties are suggested
  genericArg.prop1 = 5; // intelliSense fails to list the properties
}

在這個例子中,VSCode 的智能感知顯示了非泛型參數的屬性列表,但它沒有為泛型參數顯示。 泛型參數被視為 any 類型的對象。

我主要擔心的是,如果我不應該使用Omit我還能使用什么? 如果我想用類型而不是接口來實現它,我該怎么做?

TypeScript 在你的通用接口上給你一個錯誤:

接口只能擴展對象類型或對象類型與靜態已知成員的交集。

這就是它不起作用的原因。 (請參閱操場上的錯誤。)

您可以使用我們的類型:

type OmitMatch<T extends { match: any }> = Omit<T, "match">;

這工作正常。 在操場上。)

暫無
暫無

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

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