typescript - Varför `type a={} extends {a?:number}? true:false;` är sant
Varför type a={} extends {a?:number}? true:false; är sant, men type b={a?:number} extends {}? true:false; är också sant!
Jag tror att {} är en supertyp och den kan inte utöka några typer, men om det finns en typ där alla egenskaper är valfria (?), kommer {} att utöka denna typ, varför?
Kärnproblemet är hur man bedömer kompatibilitet mellan typer. Innan jag stötte på detta problem använde jag alltid mängdteori för att förklara dem, men det är ineffektivt för detta problem, så jag behöver en ny teori, om inte TypeScript gör något speciellt med {}
Svar #1
Du kan tolka extends som 'kan tilldelas'. Därför sträcker sig {} till vilken typ som helst där alla egenskaper är valfria.
const a: { a?: string, b?: number } = {}; // legal, no error
