код машинописи основан на угловой 2 Cookbook главы о динамических формах - https://angular.io/docs/ts/latest/cookbook/dynamic-form.htmlКак правильно указать партитуры объектов в TypeScript?
Пожалуйста, соблюдайте:
вопросительного base.ts
export class QuestionBase<T>{
value: T;
key: string;
label: string;
required: boolean;
order: number;
controlType: string;
constructor(options: {
value?: T,
key?: string,
label?: string,
required?: boolean,
order?: number,
controlType?: string
} = {}) {
this.value = options.value;
this.key = options.key || '';
this.label = options.label || '';
this.required = !!options.required;
this.order = options.order === undefined ? 1 : options.order;
this.controlType = options.controlType || '';
}
}
мульти-ответ-вопрос -base.ts
import {QuestionBase} from './question-base';
interface AnswerOption {
key: string;
value: string;
}
export class MultiAnswerQuestionBase<T> extends QuestionBase<T> {
answerOptions: AnswerOption[];
constructor(options: {answerOptions?: AnswerOption[]}) {
super(options);
this.answerOptions = options.answerOptions;
}
}
вопросительные dropdown.ts
import {MultiAnswerQuestionBase} from './multi-answer-question-base';
export class DropdownQuestion extends MultiAnswerQuestionBase<string> {
controlType = 'dropdown';
}
Теперь я пытаюсь создать экземпляр DropdownQuestion
вроде:
new DropdownQuestion({
key: 'brave',
label: 'Bravery Rating',
order: 3,
answerOptions: [
{key: 'solid', value: 'Solid'},
{key: 'great', value: 'Great'},
{key: 'good', value: 'Good'},
{key: 'unproven', value: 'Unproven'}
]
});
А вот машинопись жалобы о ключевых полей, этикетки и порядок:
Error:(45, 17) TS2345: Argument of type '{ key: string; label: string; order: number; answerOptions: { key: string; value: string; }[]; }' is not assignable to parameter of type '{ answerOptions?: AnswerOption[]; }'.
Object literal may only specify known properties, and 'key' does not exist in type '{ answerOptions?: AnswerOption[]; }'.
Я понимаю смысл этой ошибки, и я могу ее исправить, вводя больше классов и сделав мой код более похожим t o C# или Java или просто выбросить все типы и оставить его JavaScript. Я подозреваю, что это тоже не тип TypeScript.
Итак, что такое способ TypeScript для его исправления?
Так как вы имеете дело с литералами объектов, оно подлежит [чеки избытка собственности] (https://www.typescriptlang.org/docs/handbook/interfaces.html # over-property-checks), что мешает вам совершить этот вызов. Посмотрите документацию, она расскажет вам, как вы можете обойти это. –
Вызов функции? – mark