[英]using interface to define a new type
我正在使用接口定义新类型。 这是正确的方法吗? 我做如下:
export interface IQuestionnaire {
DataProcessingID: string;
Qestions : [{
SecurityControl : string,
securityGoal: string[],
}]
}
然后,要从中实例化,我必须这样做:
IQuestions : IQuestionnaire = {
DataProcessingID: "",
Qestions :[{
SecurityControl : "",
securityGoal: [""]
}]
};
实际上创建一个不是我想要的空对象; 但是如果没有此设置,则会引发错误,例如,“无法读取未定义的属性'Questions'”。 我的方法定义新类型是否错误?
====编辑====这是我根据您的评论所做的事情:
export interface IQuestionnaire {
DataProcessingID: string;
Qestions : Array<Iquestion>
}
interface Iquestion{
SecurityControl : string,
securityGoal: string[],
}
然后我去:
IQuestions ={} as IQuestionnaire;
然后,我仍然收到此错误: 无法读取undefined的属性“ push” 。 我不想在定义接口的地方启动它们,因为它会创建一个空对象!
您应该改用这种方式对接口建模:
export interface IQuestionnaire {
DataProcessingID: string;
Qestion: Security[];
}
interface Security {
SecurityControl: string;
securityGoal: string[];
}
原因是, Qestion
实际上是一个对象数组,每个对象都包含SecurityControl
和securityGoal
属性。 无论如何,我相信您的意思是“问题”而不是“问题”。
在您的component.ts上,您可以简单地初始化对象。
用I
前缀interface
名称是TypeScript中的反模式,如本线程中所述 。
另外,由于此interface
最终将充当JSON对象的数据模型,因此,作为约定,接口中的属性应在lowerCamelCase中。
考虑像这样创建您的interface
链:
interface Question {
securityControl: string,
securityGoal: Array<string>,
}
export interface Questionnaire {
dataProcessingID: string;
questions: Array<Question>;
}
编辑:
要初始化它,您将执行以下操作:
questionnaire: Questionnaire = {
dataProcessingID: '',
questions: []
};
questionnaire.questions.push({
securityControl: "",
securityGoal: [""]
});
我更喜欢这样:
interface Foo {
bar: number
bas: string
}
let foo = {} as Foo;
foo.bar = 123;
foo.bas = "Hello World";
您可以在此处或与此相关的stackoverflow问题中阅读有关对象初始化的更多信息。
结合其他答案,它看起来可能像这样:
export interface Question {
securityControl: string,
securityGoal: string[],
}
export interface Questionnaire {
dataProcessingID: string;
questions: Question[];
}
let questionaire = {} as Questionnaire;
questionaire.dataProcessingID = "12345";
questionaire.questions = [];
questionaire.questions.push({
securityControl: "control"
securityGoal: ["goal"]
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.