left click
left click

Reputation: 894

Does Typescript support extracted interface by excluding another interface's properties?

I wonder if it has any of the following features. I tried Google but I couldn't find it out. Thanks!

interface Numbers {
    number: number;
    number2: number;
    number3: number;
}

const numbers:Numbers - { number3 } = {
    number: 1,
    number2: 2
};

Upvotes: 2

Views: 570

Answers (1)

Titian Cernicova-Dragomir
Titian Cernicova-Dragomir

Reputation: 249706

Edit

As of Typescript 3.5 Omit is part of the predefined types Typescript comes with.

Original answer

You can do this in 2.8 using the new Exclude conditional type and the Pick mapped type

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; 

interface Numbers {
    number: number;
    number2: number;
    number3: number;
}

const numbers:Omit<Numbers, 'number3'> = {
    number: 1,
    number2: 2
};

Before 2.8 Omit could be defined like this:

type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T];  
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>; 

Upvotes: 5

Related Questions