2017-10-16 4 views
1

J'essaie d'assigner un tableau de Article à mon document mongoose, mais il semble que Typescript n'aime pas ça et je ne sais pas pourquoi il montre cet avertissement/erreur que ce n'est pas assignable.Typescript Interface [] vs [Inferface]

Mes Schemas mangouste et interfaces (simplifié):

interface Profile { 
    username: string, 
    articles: [Article] 
} 

interface Article { 
    index: number, 
    name: string, 
} 

// Mongoose model 
export interface IProfile extends Profile, Document { } 
const Article = new Schema({ 
    index: { type: Number, required: true }, 
    name: { type: String, required: true }, 
}, { _id: false }) 

const Profile = new Schema({ 
    username: { type: String, index: true }, 
    upcomingChests: { type: [Article] }, 
}, { timestamps: true }) 

export const Profile = model<IProfileModel>('IProfile', Profile) 

Mon code en essayant d'assigner les articles:

const profile: Profile = values[0] 
const articles: Array<Article> = values[1] 
profile.articles = articles // Error/Warning pops up in this line 

[ts] Type 'article []' est incessible taper '[Article]'.
La propriété '0' est manquante dans le type 'Article []'.

Ma question:

Pourquoi dit-il est incessible et quelle est la différence entre [l'article] et à l'article [] du tout?

+0

La duplication possible de [Type 'Array \ [\]' n'est pas assignable au type '\ [Array \]'] (https://stackoverflow.com/questions/40697919/type-array-is-not-assignable -to-type-array) – jcalz

Répondre

2

[Article] signifie quelque chose de différent: un type tuple avec 1 élément Article. Vous pouvez utiliser Article[], le même type à Array<Article>.

+0

Donc je suis supposé changer l'interface de Profile pour qu'il dise 'articles: Article []' est-ce correct? – kentor

+0

Je ne peux pas en dire beaucoup sur vos données réelles, mais cela devrait corriger la différence de type (et est plus susceptible d'être utilisé ici). – Jokester