typescript - Hur specificerar man att en egenskapstyp måste utvidga en annan typ?


Jag försöker deklarera en typ som endast ska acceptera objekt där de utvidgar en annan typ.

Till exempel:

export interface A extends B {
  aProp: string;
}

export interface B {
  bProp: string;
  // Feels wrong but how to tell something like ReadonlyArray<subClass extends B>?
  // I need children to contain A (or anything that extends B) & B properties
  children: ReadonlyArray<any & B>;
  childrenThatDoesntWork: ReadonlyArray<any extends B>; // <-- error here
}

class SomeClass {
  fun(obj: any extends B) { // <-- error '?' expected

  }
}

Hur gör man detta?

Tack!

Svar #1

Här är min lösning:

export interface A extends B {
    aProp: string;
}

export interface B {
    bProp: string;
    // Feels wrong but how to tell something like ReadonlyArray<subClass extends B>?
    // I need children to contain A (or anything that extends B) & B properties
    children: ReadonlyArray<A | B>;
    childrenThatDoesntWork: ReadonlyArray<B>; 
}

class SomeClass {
    fun<T extends B>(obj: T) { 

    }
}

Vänligen kontrollera om det fungerar för ditt fall. Om inte, vänligen tillhandahåll koden för tester