TypeScriptを使用してReactネイティブアプリを構築しています。 renderItem
は、分解されたアイテムに暗黙的にany
タイプがあると不平を言います。私はググって この質問 を見つけて、彼らがここで教えるものをindex.d.ts
パッケージの@types
の型と組み合わせて実装しようとしましたReactネイティブ。
export interface Props {
emotions: Emotion[];
}
class EmotionsPicker extends PureComponent<Props> {
keyExtractor = (item, index) => index;
renderItem = ({ item }) => (
<ListItem title={item.name} checkmark={item.checked} />
);
render() {
return (
<FlatList<Emotion>
keyExtractor={this.keyExtractor}
renderItem={this.renderItem}
data={this.props.emotions}
/>
);
}
}
残念ながら、これは機能しません。アイテムのタイプをEmotion
にするにはどうすればよいですか?
私は解決策を見つけました(それが理想的であるかどうかはわかりませんが):
renderItem = ({ item }: { item: Emotion }) => (
<ListItem title={item.name} checkmark={item.chosen} />
);
これは、renderItem
が定義された時点で、TypeScriptがrenderItem
のFlatList
のプロップとして機能することを認識できないためです。
変数をスキップして関数を直接プロップに配置した場合、TypeScriptはそれを正しく推論できるはずです。
export interface Props {
emotions: Emotion[];
}
class EmotionsPicker extends PureComponent<Props> {
render() {
return (
<FlatList<Emotion>
keyExtractor={(item, index) => index}
renderItem={({ item }) => <ListItem title={item.name} checkmark={item.checked} />}
data={this.props.emotions}
/>
);
}
}
私はそれが古い質問であることを知っていますが、それをグーグルする人々はまだそれを感謝するかもしれません。
import { FlatList, ListRenderItem } from 'react-native'
/*
.
.
.
*/
renderItem: ListRenderItem<Emoticon> = ({ item }) => (
<ListItem title={item.name} checkmark={item.checked} />
);