Skip to content

unexpected behaviour when use Omit with Insection Types #39359

Closed
@rust404

Description

@rust404

TypeScript Version: 3.9.2

Search Terms:
omit, insection types

Code

interface User {
  type: 'user';
  name: string;
  age: number;
  occupation: string;
}

interface Admin {
  type: 'admin';
  name: string;
  age: number;
  role: string;
}

type PowerUser = Omit<User & Admin, 'type'> & {
  type: 'powerUser'
};
let p: PowerUser = {
  type: 'powerUser',
  name: 'hello',
  age: 123,
  occupation: '123',
  role: '123'
}
console.log(p)

Expected behavior:
no error

Actual behavior:

test.ts:21:3 - error TS2322: Type 'string' is not assignable to type 'never'.

21   name: 'hello',
     ~~~~

test.ts:22:3 - error TS2322: Type 'number' is not assignable to type 'never'.

22   age: 123,
     ~~~

test.ts:23:3 - error TS2322: Type 'string' is not assignable to type 'never'.

23   occupation: '123',
     ~~~~~~~~~~

test.ts:24:3 - error TS2322: Type 'string' is not assignable to type 'never'.

24   role: '123'
     ~~~~

Playground Link:
https://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=26&pc=15#code/LAKAlgdgLgpgTgMwIYGMYAICqBne6Deo66UAngA4wBc6A5AK65y0DcR6ESAttetlHEgBzNiGJIhvCPS4AjeKOIB7FCnrkkUMEog1+giCNABfUKEixEqDAEEAJl0gF2ZSjVpIHkVu0489AsKK6BJSMvJwwXBKADa8+kEmZiCuGAAKSgDu8Dh4ALzoAPKOUAA8uXDoAGTo9o4QADR0qbQAfNXOYiQUvLTkWTlMtCaicVDo5DQZ2XAV6AWEXanu-TMVtA2+3L0AFjAxMUob7KE0AIwATADMm10qahpaOu6XV8dd0XEv18MgpiAoHTYWIwAB0hyEAApyABKIA
Related Issues:

Metadata

Metadata

Assignees

No one assigned

    Labels

    Working as IntendedThe behavior described is the intended behavior; this is not a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions