Ошибка TS2345: аргумент типа «StudentInfo» нельзя назначить параметру типа «строка». ⇐ Android
Ошибка TS2345: аргумент типа «StudentInfo» нельзя назначить параметру типа «строка».
Я получаю строковый тип при переборе объекта с помощью карты. Поэтому я вынужден использовать JSON.parse, а затем использовать поля объекта.
Вот мой компонент в TS, вызывающий проблемы:
StudentsScreen.tsx:
экспортировать функцию по умолчанию StudentScreen(props: StudentInfoProps) { const {studentList} = реквизит; console.log(typeof StudentList);//объект console.log(JSON.stringify(studentList)); //["{\"имя\":\"Джон Доу\",\"курс\":\"Javascript\"}","{\"имя\":\"Джейн Доу\",\"курс \":\"Машинопись\"}","{\"имя\":\"Грег Доу\",\"курс\":\"ReactNative\"}"] вернуть { StudentList?.map(студент => { console.log(тип студента);//строка const {имя, курс} = JSON.parse(студент); //Мне не нужно этого делать //const {имя, курс} = студент; //Этого должно быть достаточно. Однако это приведет к тому, что имя и курс станут неопределенными. возвращаться ( ); })} ; } Ошибка:
Screens/Students.tsx:11:53 — ошибка TS2345: аргумент типа «StudentInfo» невозможно назначить параметру типа «строка». 11 const {имя, курс} = JSON.parse(студент); StudentInfo.tsx:
тип экспорта StudentInfo = { имя: строка; курс: строка; }; тип экспорта StudentInfoProps = { список студентов: StudentInfo[]; }; тип экспорта RootStackParamList = { ReactNative: {studentList: StudentInfoProps}; }; Знаете ли вы, что может привести к получению строки при обходе объекта?
Этот объект взят из Android Native:
MyReactActivity.java:
публичный класс MyReactActivity расширяет ReactActivity реализует DefaultHardwareBackBtnHandler { частный ReactInstanceManager mReactInstanceManager; частный ReactRootView mReactRootView; protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); mReactRootView = новый ReactRootView (это); Gson gson = новый Gson(); Начальные свойства пакета = новый пакет (); Студент stud1 = новый Студент("Джон Доу", "Javascript"); Студент stud2 = новый Студент("Джейн Доу", "Машинопись" ); Student stud3 = new Student("Грег Доу", "React Native"); ArrayList StudentList = новый ArrayList(); StudentList.add(gson.toJson(stud1)); StudentList.add(gson.toJson(stud2)); StudentList.add(gson.toJson(stud3)); InitialProperties.putStringArrayList("studentList", StudentList); mReactRootView.startReactApplication(mReactInstanceManager, «RNProject», InitialProperties); setContentView (mReactRootView); } } Здесь я определил объект Student в Java, который затем передается в React Native:
Студент, Java:
пакет com.rnproject.screens.reactnative.helpers; импортировать java.io.Serializable; публичный класс Student реализует Serializable { частное имя строки; частный курс игры на струнных инструментах; публичный студент(){} @Override публичная строка toString(){ return "{name="+name+",course="+course+"}"; } public Student (имя строки, курс строки) { это.имя = имя; this.course = курс; } } Заметили ли вы какие-либо проблемы с объектом ученика, которые могут привести к получению строки во время итерации с картой?
Почему мне не разрешено делать что-то подобное?
const Student = [{"name":"Джон Доу", "курс":"Машинопись"}, {"name":"Джейн Доу", "course":"Javascript"}] const tmp = студенты.карта(студент => { const {имя, курс} = студент; console.log(имя); console.log(курс); }) Большое спасибо за помощь!
Я получаю строковый тип при переборе объекта с помощью карты. Поэтому я вынужден использовать JSON.parse, а затем использовать поля объекта.
Вот мой компонент в TS, вызывающий проблемы:
StudentsScreen.tsx:
экспортировать функцию по умолчанию StudentScreen(props: StudentInfoProps) { const {studentList} = реквизит; console.log(typeof StudentList);//объект console.log(JSON.stringify(studentList)); //["{\"имя\":\"Джон Доу\",\"курс\":\"Javascript\"}","{\"имя\":\"Джейн Доу\",\"курс \":\"Машинопись\"}","{\"имя\":\"Грег Доу\",\"курс\":\"ReactNative\"}"] вернуть { StudentList?.map(студент => { console.log(тип студента);//строка const {имя, курс} = JSON.parse(студент); //Мне не нужно этого делать //const {имя, курс} = студент; //Этого должно быть достаточно. Однако это приведет к тому, что имя и курс станут неопределенными. возвращаться ( ); })} ; } Ошибка:
Screens/Students.tsx:11:53 — ошибка TS2345: аргумент типа «StudentInfo» невозможно назначить параметру типа «строка». 11 const {имя, курс} = JSON.parse(студент); StudentInfo.tsx:
тип экспорта StudentInfo = { имя: строка; курс: строка; }; тип экспорта StudentInfoProps = { список студентов: StudentInfo[]; }; тип экспорта RootStackParamList = { ReactNative: {studentList: StudentInfoProps}; }; Знаете ли вы, что может привести к получению строки при обходе объекта?
Этот объект взят из Android Native:
MyReactActivity.java:
публичный класс MyReactActivity расширяет ReactActivity реализует DefaultHardwareBackBtnHandler { частный ReactInstanceManager mReactInstanceManager; частный ReactRootView mReactRootView; protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); mReactRootView = новый ReactRootView (это); Gson gson = новый Gson(); Начальные свойства пакета = новый пакет (); Студент stud1 = новый Студент("Джон Доу", "Javascript"); Студент stud2 = новый Студент("Джейн Доу", "Машинопись" ); Student stud3 = new Student("Грег Доу", "React Native"); ArrayList StudentList = новый ArrayList(); StudentList.add(gson.toJson(stud1)); StudentList.add(gson.toJson(stud2)); StudentList.add(gson.toJson(stud3)); InitialProperties.putStringArrayList("studentList", StudentList); mReactRootView.startReactApplication(mReactInstanceManager, «RNProject», InitialProperties); setContentView (mReactRootView); } } Здесь я определил объект Student в Java, который затем передается в React Native:
Студент, Java:
пакет com.rnproject.screens.reactnative.helpers; импортировать java.io.Serializable; публичный класс Student реализует Serializable { частное имя строки; частный курс игры на струнных инструментах; публичный студент(){} @Override публичная строка toString(){ return "{name="+name+",course="+course+"}"; } public Student (имя строки, курс строки) { это.имя = имя; this.course = курс; } } Заметили ли вы какие-либо проблемы с объектом ученика, которые могут привести к получению строки во время итерации с картой?
Почему мне не разрешено делать что-то подобное?
const Student = [{"name":"Джон Доу", "курс":"Машинопись"}, {"name":"Джейн Доу", "course":"Javascript"}] const tmp = студенты.карта(студент => { const {имя, курс} = студент; console.log(имя); console.log(курс); }) Большое спасибо за помощь!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение