typescript - Hur man genererar en varning/fel när man använder icke-sträng-variabler inom stränginterpolering?


TypeScript ger inga fel för följande kod:

const maybe_a_string: undefined | string = undefined;
const false_or_string: false | string = false;

// I'd like the following to produce an error/warning...
const message_string = `Some readable string info should be here: ${maybe_a_string}  ${false_or_string}`;

Finns det någon slags inställning jag kan slå på, eller enkla alternativa sätt att skriva sista raden som varnar mig för att försöka använda icke-strängvariabler inne i strängar på detta sätt? (men utan att behöva lägga till extra kodrader för varje delsträng som ska kontrolleras individuellt)

Jag antar att det behandlar dem som fina eftersom vissa typer som booleska värden, nummer och diverse objekt har en .toString()-metod...

Men särskilt i fallet med undefined (som egentligen inte har någon .toString()-metod) - det är ganska vanligt att du har en bugg där, eftersom den enda gången du verkligen vill se strängen "undefined" inuti en annan sträng är för felsökningsändamål. Men det finns många sådana buggar ute i det vilda där slutanvändare oavsiktligt ser saker som "hello undefined".

Svar #1

Personligen skulle jag hantera detta genom att göra strängmallen till en funktion. På det sättet kan du specificera att argumenten måste vara strängar.

const createMessageString = (first: string, second: string): string => {
    return `Some readable string info should be here: ${first}  ${second}`;
}

const message_string = createMessageString( maybe_a_string, false_or_string );
// will give an error unless types are refined

Svar #2

Rösta på https://github.com/microsoft/TypeScript/issues/30239 [Begränsa mallsträngars interpolationsuttryck till strängar]

Dessutom kan du prova lösningar från kommentarerna till problemet.