Versi TypeScript: 2.1.0-dev.20161008
Komponen ReactNative Minimal untuk menggambarkan masalah:
import React, { Component } from 'react';
import { StyleSheet, Text } from 'react-native';
export class Sample extends Component<{}, {}> {
render() {
return (
<Text style={styles.text}>Hello TypeScript</Text> // error on styles, see below
);
}
}
const styles = StyleSheet.create({
text: {
position: 'absolute', // cause of the error: string instead of 'absolute'
top: 0,
left: 0
}
});
Kesalahan:
error TS2322: Type '{ position: string; top: number; left: number; }' is not assignable to type 'TextStyle | undefined'.
Type '{ position: string; top: number; left: number; }' is not assignable to type 'TextStyle'.
Types of property 'position' are incompatible.
Type 'string' is not assignable to type '"absolute" | "relative" | undefined'.
Saya suka bahwa deklarasi reactnative tidak menggunakan string, tetapi hanya mengizinkan set string yang mungkin.
Apakah ada cara untuk membiarkan TypeScript menyimpulkan ini untuk mengetik 'absolut'?
Mungkin jika saya bisa menandai bidang position
sebagai hanya baca, ini bisa menyimpulkan untuk mengetik 'absolut'.
Terkait dengan # 10676?
Saya tidak suka melakukan casting dan mencegahnya sebanyak mungkin, tetapi berikut ini solusinya:
const styles = StyleSheet.create({
text: {
position: 'absolute',
top: 0,
left: 0
} as React.TextStyle // cast to existing interface
});
Ketika tidak ada antarmuka yang diekspor (di sini: TextStyle), kita hanya dapat mentransmisikan bidang:
const styles = StyleSheet.create({
text: {
position: 'absolute' as 'absolute', // cast string to type 'absolute'
top: 0,
left: 0
}
});
Ini terkait dengan https://github.com/Microsoft/TypeScript/pull/19966.
Ini juga bisa menjadi kasusnya: https://github.com/Microsoft/TypeScript/issues/21618#issuecomment -362945112
Komentar yang paling membantu
Saya tidak suka melakukan casting dan mencegahnya sebanyak mungkin, tetapi berikut ini solusinya:
Ketika tidak ada antarmuka yang diekspor (di sini: TextStyle), kita hanya dapat mentransmisikan bidang: