typescript - Varför kan jag använda typförklaringar med literaler som `false`?
I TypeScript kan jag framgångsrikt kompilera följande kod:
const x = true as false;
Så jag har en konstant x med värde true och typ false. Jag förväntade mig att sådana direkta påståenden borde vara ogiltiga, men överraskande nog är det giltigt. Till exempel, för liknande kod
const x = 0 as false;
det finns ett kompileringsfel
Omvandling av typ 'number' till typ 'false' kan vara ett misstag eftersom ingen av typerna överlappar tillräckligt mycket med den andra. Om detta var avsiktligt, konvertera uttrycket till 'unknown' först.
Jag förväntade mig att ett liknande fel skulle inträffa med true och false.
Varför finns det inget fel och finns det ett sätt (som någon uppsättning kompilatoralternativ) att fixa det?
Svar #1
Det är för att TypeScript utvidgar typerna själva. Sant och falskt överlappar varandra, de är båda booleska typer. 0 och falskt överlappar inte, den ena är ett tal, den andra en boolean.