我正在使用一个接口来定义一个新类型。这是正确的做法吗?我做如下:
export interface IQuestionnaire {
DataProcessingID: string;
Qestions : [{
SecurityControl : string,
securityGoal: string[],
}]
}
然后,为了实例化它,我必须这样做:
IQuestions : IQuestionnaire = {
DataProcessingID: "",
Qestions :[{
SecurityControl : "",
securityGoal: [""]
}]
};
它实际上创建了一个空对象,这不是我想要的;但是如果没有这个,它会引发一个错误,例如,“无法读取未定义的属性‘问题’”。我定义新类型的方法是错误的吗?
====EDIT====以下是我根据你的评论所做的:
export interface IQuestionnaire {
DataProcessingID: string;
Qestions : Array<Iquestion>
}
interface Iquestion{
SecurityControl : string,
securityGoal: string[],
}
然后我说:
IQuestions ={} as IQuestionnaire;
然后我仍然得到这个错误:无法读取未定义的属性“push”。我不想在定义接口的地方启动它们,因为它会创建一个空对象!
我更喜欢这样做:
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"]
});
在接口
名称前面加上I
是TypeScript中的一种反模式,如本线程所述。
此外,由于此接口
最终将充当JSON对象的数据模型,因此作为惯例,接口中的属性应为lowerCamelCase。
考虑创建你的<代码>接口<代码>链接如下:
interface Question {
securityControl: string,
securityGoal: Array<string>,
}
export interface Questionnaire {
dataProcessingID: string;
questions: Array<Question>;
}
编辑:
要初始化它,您将执行以下操作:
questionnaire: Questionnaire = {
dataProcessingID: '',
questions: []
};
questionnaire.questions.push({
securityControl: "",
securityGoal: [""]
});
您应该以这种方式对接口建模:
export interface IQuestionnaire {
DataProcessingID: string;
Qestion: Security[];
}
interface Security {
SecurityControl: string;
securityGoal: string[];
}
原因是,Qestion
实际上是一个对象数组,每个对象都由SecurityControl
和securityGoal
属性组成。无论如何,我相信你的意思是“问题”而不是“问题”。
在component.ts,您可以简单地初始化对象。
我正在编写一个代码,它取两个点,确定两个点的大小,比较它们,并返回哪个更大。我有我的主类和方法来运行所有的东西,然后还有另一个类点来实现我的接口。但是,我无法使从接口调用的方法正常工作。我的代码是: 当我尝试运行它时,我得到错误“exception in thread”main“java.lang.nullPointerException:不能调用”point.getMetality()“,因为”
问题内容: 两者之间有什么区别,哪个更好使用?为什么? 问题答案: 是interface,哪里是class,并且此类实现接口。 我希望使用第二种形式,这种形式更通用,即如果您不使用特定于方法的方法,则可以将其类型声明为接口类型。使用第二种形式,将实现从实现更改为实现接口的其他类将变得更加容易。 编辑: 由于许多SO用户都评论了这两种形式都可以是接受或的任何方法的参数。但是当我声明方法时,我更喜欢接
问题内容: 我计划在我的Swift项目中使用Google Drive API 。我正在尝试通过CocoaPods(v0.39.0)添加Drive SDK。以下是我的Podfile。 我添加了标志,以便CocoaPods可以将Objective-C Pod转换为Swift框架,而不是静态库。 吊舱安装成功。但是,当我构建项目时,出现以下错误。 类“ GTMHTTPUploadFetcher”的接口定
首先定义一个特别的实体Repository interface。接口必须继承自Repository并且要定义为实体类和一个ID类型。如果你想要为这个实体类实现CRUD操作,继承CrudRepository替换Repository
1.1.1. Rokid客户端协议 1.1.1. Rokid客户端协议 目录 Tts接口定义 speech接口定义 asr接口定义 nlp接口定义 Tts接口定义 调用接口 bool prepare(const char* config_file); void release(); bool prepared(); int speak(const char* content, TtsCall
我想实现一个接口,它包含一系列函数和属性,很少函数需要在回调模式下工作。例如: 我想执行generateData函数并在作业完成后通知。例如: 我完全误解了接口中回调的语法和调用。如果有人举例说明,那就太好了。