Я пытаюсь создать интерфейс, в котором отсутствует свойство данного типа. Для этого я использовал Omit
, что приводит к типу, так что это неправильно по определению. Однако, если бы это был не универсальный c интерфейс, он работал бы отлично.
Рассмотрим следующий пример.
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
}
В этом примере intelliSense для VSCode показывает список свойств для аргумент non-generi c, но он не может сделать это для аргумента generi c. Аргумент generi c рассматривается как объект любого типа.
Моя главная проблема заключается в том, что если я не должен использовать Omit
, что еще я могу использовать? И если бы я хотел реализовать это с помощью типов, а не интерфейсов, как я мог бы это сделать?