我有以下的Typescript接口文件,我正在尝试使用其中的WordForm对象创建一个Word类型的简单最小对象:
interface IWord {
categoryId: number;
createdBy: number;
createdDate: any;
groupId: number;
ielts: boolean;
lessonId: number;
modifiedBy: number;
modifiedDate: any;
toefl: boolean;
toeic: boolean;
wordForms: IWordForm[];
wordId: string;
}
interface IWordForm {
createdBy: number;
createdDate: any;
definition: string;
modifiedBy: number;
modifiedDate: any;
posId: number;
primary: boolean;
sample1: string;
sample2: string;
sample3: string;
sample4: string;
sample5: string;
synoym: string;
wordFormId: string;
wordId: string;
}
这没关系:
wos.word = <IWord>{
categoryId: 1,
lessonId: 1,
groupId: 1,
toefl: true
}
但是这给了我一个错误:
wos.word = <IWord>{
categoryId: 1,
lessonId: 1,
groupId: 1,
toefl: true,
wordForm: <IWordForm>{
posId: 1
}
}
严重级代码描述项目文件行抑制状态 错误TS2352都没有输入'{categoryId:number; lessonId:数字; groupId:number; toefl:boolean; wordForm:IWordForm; ''也不打字 'IWord'可分配给另一个。物业'createdBy'缺失 在类型'{categoryId:number; lessonId:数字; groupId:number; toefl:boolean; wordForm:IWordForm; }”。 admin C:\ H \ admin \ admin \ app \ routes \ words.ts 76 Active
严重级代码描述项目文件行抑制状态 错误构建:都没有输入'{categoryId:number; lessonId:数字; groupId:number; toefl:boolean; wordForm:IWordForm; ''也不打字 'IWord'可分配给 其他。 admin C:\ H \ admin \ admin \ app \ routes \ words.ts 76
有人可以帮忙告诉我如何创建一个带有单词形式的单词对象吗?请注意,我知道我的作业中缺少很多参数,但通过演员我认为这应该仍然有用。
答案 0 :(得分:2)
在您的特定情况下,问题是接口有一个带有IWordForm列表的wordForms属性,但是您提供了一个wordForm(单数)属性,只有一个单词形式,而不是列表。如果您重命名它并将表单包装在列表中,它应该可以工作:
wos.word = <IWord> {
categoryId: 1,
lessonId: 1,
groupId: 1,
toefl: true,
wordForms: [{
posId: 1
}]
}
更一般地说,这不是铸造如何运作。在这样的情况下,铸造无济于事;当你投射某些内容时,你承诺它具有你提供的类型,如果你可能是正确的(例如将string|number
转换为number
),那就没问题了,但如果你将any
转换为wos.word = <IWord> <any> {
categoryId: 1,
lessonId: 1,
groupId: 1,
toefl: true,
wordForm: <IWordForm>{
posId: 1
}
}
,那么TypeScript将不会允许它知道你肯定是错的(将字符串转换为数字),只有在你可能是对的时候才会这样。
如果你需要正常地避免这种情况,你可以通过首先转换为height
来强制TypeScript接受你的正确性,如下所示。没有充分的理由不要这样做! (测试中的存根/嘲讽是我所知道的几个很好的理由之一):
svg
答案 1 :(得分:1)
使每个属性&#34; nullable&#34; (带问号)。
interface IWord {
categoryId?: number;
createdBy?: number;
createdDate?: any;
groupId?: number;
ielts?: boolean;
lessonId?: number;
modifiedBy?: number;
modifiedDate?: any;
toefl?: boolean;
toeic?: boolean;
wordForms?: IWordForm[];
wordId?: string;
}
interface IWordForm {
createdBy?: number;
createdDate?: any;
definition?: string;
modifiedBy?: number;
modifiedDate?: any;
posId?: number;
primary?: boolean;
sample1?: string;
sample2?: string;
sample3?: string;
sample4?: string;
sample5?: string;
synoym?: string;
wordFormId?: string;
wordId?: string;
}
和wordForms是一个数组:
wordForms: [{
posId: 1
}]
而且......你可能不需要在输入时输出类型。