2016-06-19 14 views
6

मुझे टाइपस्क्रिप्ट के संबंध में एक बहुत अजीब त्रुटि मिल रही है जो मुझे बताती है कि स्ट्रिंग अक्षर नहीं मिलते हैं। (टाइपप्रति v1.8)टाइपस्क्रिप्ट प्रतिक्रिया मूल स्ट्रिंग शाब्दिक असाइनमेंट त्रुटि

import { Component } from "react"; 
import { 
    StyleSheet, 
    Text, 
    View 
} from "react-native"; 

const styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: "center", 
    alignItems: "center", 
    backgroundColor: "#F5FCFF", 
    }, 
    welcome: { 
    fontSize: 20, 
    textAlign: "center", 
    margin: 10, 
    } 
}); 

export class App extends Component<any, any> { 
    render() { 
    return (
     <View style={styles.container}> 
     <Text style={styles.welcome}> 
      Welcome to React Native! 
     </Text> 
     </View> 
    ); 
    } 
} 

त्रुटि: src \ ग्राहक \ index.ios.tsx (19,15): त्रुटि TS2322: प्रकार '{FONTSIZE: संख्या; टेक्स्टअलाइन: स्ट्रिंग; मार्जिन: संख्या; } 'टेक्स्ट स्टाइल' टाइप करने के लिए असाइन नहीं किया जा सकता है। संपत्ति के प्रकार 'textAlign' असंगत हैं। टाइप 'स्ट्रिंग' टाइप करने के लिए असाइन करने योग्य नहीं है "ऑटो" | "बाएं" | "दाएं" | "केन्द्र" '। टाइप 'स्ट्रिंग' टाइप करने के लिए असाइन करने योग्य नहीं है "'केंद्र टाइप करें।

मैंने सही टाइपिंग स्थापित की। ऐसा लगता है कि निम्नलिखित टाइपस्क्रिप्ट में काम नहीं करता है।

interface Test { 
    a: "p" | "q" 
} 

let x : Test; 
let y = { 
    a: "p" 
} 

x = y; 

स्रोत:

<Text style={styles.welcome as any}> 

कारण::

प्रकार मान लिया जाता है declaraiton के आधार पर करने के लिए https://blog.lopezjuri.com/2015/12/30/react-native--typescript/

+0

मेरे पास यह समस्या टाइपस्क्रिप्ट 2.1.x के साथ भी है। – Learner

उत्तर

5

उदासी आप प्रकार का दावा करने की जरूरत है। शाब्दिक एक स्ट्रिंग क्योंकि

let foo = "asdf"; // foo: string 

// Its a string becuase: 
foo = "something else"; // Would be strange if this would error 
12

मैं जानता हूँ कि मैं खेल के लिए देर हो रही है, लेकिन सिर्फ एक ही मुद्दा में आए और इस समाधान पसंद करते हैं (का उपयोग कर से नफरत है यह बाद से 'कोई भी' (स्ट्रिंग शाब्दिक के बजाय) string के रूप में मान लिया जाता है एक तरह से टाइपप्रति के प्रयोजन को हरा देता है हालांकि कभी-कभी यह एकमात्र विकल्प है):

import { Component } from "react"; 
import { 
    StyleSheet, 
    Text, 
    View 
} from "react-native"; 

interface Props { 
} 

interface State { 
} 

interface Style { 
    container: React.ViewStyle, 
    welcome: React.TextStyle 
} 

const styles = StyleSheet.create<Style>({ 
    container: { 
    flex: 1, 
    justifyContent: "center", 
    alignItems: "center", 
    backgroundColor: "#F5FCFF", 
    }, 
    welcome: { 
    fontSize: 20, 
    textAlign: "center", 
    margin: 10, 
    } 
}); 

export class App extends Component<Props, State> { 
    render() { 
    return (
     <View style={styles.container}> 
     <Text style={styles.welcome}> 
      Welcome to React Native! 
     </Text> 
     </View> 
    ); 
    } 
} 

हम StyleSheet.create क्या प्रकार शैलियों का निर्माण त्रुटि बनाने के लिए की हल हो गई है बता सकते हैं।

+3

मुझे "कंटेनर: {...}" परिभाषा के बाद "React.ViewStyle" के रूप में जोड़ने के लिए यह आसान और क्लीनर मिलता है, जो अल्पविराम से पहले इसे अल्प परिभाषा से अलग करता है। फिर "React.TextStyle" को " आपका स्वागत है: {...} "परिभाषा। इस तरह, यदि कोई और नई फ़ाइल जोड़ने के लिए जाता है, तो शैली को टाइप करने की आवश्यकता स्पष्ट होगी। –

संबंधित मुद्दे