#typescript
Вопрос:
Я пытаюсь выполнить эквивалент следующего кода JavaScript в typescript:
users.map( item => (
{ name: item.name,
email: item.email,
...item.user
}
));
Итак, users
это похоже на:
users = [
{
name: "John",
email: "john@msn"
user: {
age: 56,
gender: "Male",
address: "...",
sport: "basketball"
}
},
...
]
Я пытаюсь преобразовать его в:
users = [
{
name: "John",
email: "john@msn",
age: 56,
gender: "Male",
address: "...",
sport: "basketball"
},
...
]
Я думал, что должен был объявить тип параметра непосредственно после параметра и тип возвращаемого значения перед стрелкой:
users.map( (item:object):object => (
{ name: item.name,
email: item.email,
...item.user
}
));
Но это не работает.
Есть какие-нибудь намеки?
Ответ №1:
Вы можете использовать map
в typescript без какого-либо типа, как в JavaScript, но если вы хотите использовать тип, вам нужно создать интерфейс. Обратите внимание , что объект не имеет свойства name
email
и других свойств, поэтому при использовании объекта ts
компилятор выдает ошибку:
Попробуйте вот это:
interface personlaInfo{
age: number,
gender: string,
address: string,
sport: string
}
interface user{
name:string,
email: string
personlaInfo:personlaInfo;
}
var users : Array<user> = [
{
name: "John",
email: "john@msn",
personlaInfo: {
age: 56,
gender: "Male",
address: "...",
sport: "basketball"
}
}
]
var f = users.map( (item:user) => (
{ name: item.name,
email: item.email,
...item.personlaInfo
}
));
Ответ №2:
Вам не нужно второе object
, в этом случае TypeScript может сделать вывод, например, так:
users.map((item:object) => (
{ name: item.name,
email: item.email,
...item.user
}
));
Ответ №3:
Вам нужно определить интерфейсы для вашего типа данных и использовать их на карте, как показано ниже:
interface MyUser {
name: string;
email: string;
age: number;
gender: string;
address: string;
sport: string;
}
interface UserInfo {
age: number;
gender: string;
address: string;
sport: string;
}
interface User {
name: string;
email: string;
user: UserInfo
}
const users:Array<User> = [
{
name: "John",
email: "john@msn",
user: {
age: 56,
gender: "Male",
address: "...",
sport: "basketball"
}
},
{
name: "John1",
email: "john1@msn",
user: {
age: 26,
gender: "Male",
address: "...",
sport: "basketball"
}
},
];
const my_users = users.map( (item:User):MyUser => (
{ name: item.name,
email: item.email,
...item.user
}
));
console.log(my_users)