Nominal typ i TypeScript


Jag har följande kod:

interface A {}
interface B {}

let a: A;
let b: B;

// I want this to fail to compile
a = b;

Eftersom gränssnitten A och B ser likadana ut kompilerar det utan problem. Hur kan jag definiera variabeln a så att a=b inte kompilerar eftersom typerna är olika?

Typescript 4.7.4.

Svar #1

Dessa gränssnitt (former) överlappar, så även om a: A, kan det fortfarande tilldelas till b: B.

interface A {
    type: 'A'
}
interface B {
    type: 'B'
}

let a: A;
let b: B;

// fails
a = b;