TypeScript-typeinformasjonsproblem med strengliteral
I en React Native-applikasjon har jeg stilen
const styles = StyleSheet.create({
text: {
textAlign: "center"
},
})
brukt i <Text style={styles.text} />, men tsc-kompilatoren gir følgende feil:
Types of property 'textAlign' are incompatible.
Type 'string' is not assignable to type '"center" | "auto" | "left" | "right"'.
Definisjonen av TextStyle i @types/react-native inkluderer:
export interface TextStyle extends TextStyleIOS, TextStyleAndroid,
ViewStyle {
// ...
textAlign?: "auto" | "left" | "right" | "center"
// ...
}
Hvorfor klager kompilatoren på inkompatibilitet? Det ser ut til at den antyder at typen til textAlign er den for generelle string i stedet for å sjekke den faktiske verdien ("center").
Jeg vet at jeg kan bruke en as TextStyle for å unngå problemet, men jeg vil gjerne vite hvorfor det skjer og om jeg bør sende inn en sak mot kompilatoren.
Svar #1
Hvis du bruker Typescript 3.4+ kan du bruke as const-notasjonen:
export const locationInput = {
textAlign: 'center' as const
};
For mer informasjon, sjekk dokumentasjonen her.
Svar #2
Dette burde fungere:
const styles = StyleSheet.create({
text: {
textAlign: "center" as "center"
},
})
Vanligvis ville TypeScript typisere textAlign som string, men siden det ikke bare kan være en hvilken som helst streng, kan du kaste det til en mer spesifikk type.
