angular - Hvordan få Typescript til å kaste kjørefeil?
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor() {
console.log(this.getColor(1000))
}
getColor(c:String) {
return c
}
}
Min teksteditor la en rød strek under 1000 som sier: Argument av typen '1000' kan ikke tildeles til parameter av typen 'String'.ts(2345)
Ok...men appen min kjører fortsatt, og jeg kan få resultatet i konsollen min.
er det noen måte å få Angular og/eller Typescript til å forhindre en kjøring i et scenario som dette?
Svar #1
Typescript advarer deg bare om at noe ikke er riktig. Det kompilerer fortsatt, og du kan fortsatt kjøre koden og den kan fungere, men det er ikke meningen at den skal fungere slik.
Så hvordan kan du sjekke om inndataene er riktige?
function example (color: string): void {
if (typeof color !== 'string') {
throw Error() // you can put your error message in here
}
}
OPPDATERING 15.01.2022
Jeg vil foreslå å endre løsningen min ovenfor litt. Med nye TypeScript-funksjoner kunne du skrevet
interface IColor extends string
function isColor(color: any): color is IColor {
if (typeof color !== 'string') return false
return true
}
function example (input: string): void {
if (isColor(input)) {
throw Error() // you can put your error message in here
}
// everything you wanna do here
}
Noen fordeler i forhold til mitt gamle forslag:
- IColor kan endres eller utvides til tall eller heksadesimale verdier
- isColor kan brukes hvor som helst for å sjekke om noe er en gyldig farge
Svar #2
Nettleseren din kjenner ikke til TypeScript, den kjører bare den transpilerte JavaScript-koden.
Men i din situasjon vil byggeprosessen (laget av Angular) gi feil, og du vil ikke kunne distribuere applikasjonen din.
I utviklingsmodus oppstår en typescript-feil, men du kan fortsatt kjøre applikasjonen av praktiske årsaker
