【发布时间】:2021-08-07 15:32:56
【问题描述】:
我有一个不同的问题,现在把我引到这里。
我原来的问题是这样的: Why is form: FormGroup showing 'controls' as undefined in an Angular11 component?
所以这块 (ngSubmit)="send(newMaterialFormGroup.value)"> 应该是 改为 (ngSubmit)="send(newMaterialFormGroup)">
这样做会传递对象,从而允许我访问控件 成功。
但问题仍然存在......
这是组件方面:
send(form: FormGroup): void{
let jsonModel = {
materialNum: form.controls['materialNum'].value,
};
let jsonModelRaw: string = JSON.stringify(jsonModel);
//...
}
我正在使用"typescript": "~4.1.5"
如果我明确声明参数的类型为 FormGroup 并且我在 TypeScript 设置中启用了严格类型,为什么 TS 没有检测到这一点。
【问题讨论】:
-
newMaterialFormGroup的类型是什么?newMaterialFormGroup.value的类型是什么?我的猜测是后者的类型为any。 -
@VLAZ 那么
newMaterialFormGroup的类型是FormGroup,我在函数参数中明确设置了它。这就是我好奇的原因;我最初传递了newMaterialFormGroup的值,但 TS 没有实现它,并且没有抛出关于将value转换为FormGroup的错误。我刚刚检查了一下,value的类型是any,所以这实际上是有道理的……我仍然在思考这一切,哈哈。 -
好吧,
any可以分配给任何东西,所以......就是这样。它基本上是来自类型检查系统的转义子句。只要有可能,您应该使用unknown而不是any。它在某种程度上是相似的,因为可以说let x: unknown = 4- 任何东西都可以分配给unknown。但是,unknown不能分配给任何东西,let y: number = x;会导致编译失败,除非您检查类型是否正确。这使得unknown很有用,因为它用作“通配符”类型,但不会绕过类型系统。 -
很高兴知道这一点!请提供答案,我一定会接受。谢谢!
标签: angular typescript typescript-generics