You should set [formControlName] = "question.key" to the input tag, not the div element. You can see the error using Chrome WebDeveloperTools: there is no value attribute for the form control named: 'flightRules'.
<div [id]="question.key" *ngSwitchCase="'checkbox'" >
<span *ngFor="let opt of question.options">
<label>
<input [type]="question.controlType" [value]="opt.value" [formControlName]="question.key">
{{opt.value}}
</label>
</span>
</div>
<div [id]="question.key" *ngSwitchCase="'radio'">
<span *ngFor="let opt of question.options">
<label>
<input [type]="question.controlType" [value]="opt.value" [formControlName]="question.key">
{{opt.value}}
</label>
</span>
</div>
See the branched link: Link