Typescript-egenskapstyp samma som egenskap som har flera typer


I min datalagring har jag två egenskaper

data, säkerhetskopierad data

Jag försöker definiera att backupData måste vara av samma typ som data.

Men,

class ClassC{
   data: InterfaceA | InterfaceB
   backupData: InterfaceA | InterfaceB 
}

säkerställer inte att backupen är AV SAMMA typ som data.

Bör backupData vara av typen any eller finns det ett sätt att skriva detta?


Som en uppföljning för andra som stöter på detta, fungerade lösningen genom att använda svaret nedan genom att göra:

class ClassC<T>{
   data: T;
   backupData: T;
}

Svar #1

Jag tror att du behöver lösa detta med en generisk typ.

interface A {
  foo: string;
}

interface B {
  bar: string;
}

class MyClass<T extends A | B> {
  data: T;
  backupData: T;
}

const example1: MyClass<A> = {
  data: { foo: 'foo' },
  backupData: { foo: 'foo' }
}

const example2: MyClass<B> = {
  data: { foo: 'foo' }, // compiler error
  backupData: { bar: 'bar' }
}