错误 TS2742:如果没有对“.../node_modules/@angular/forms/forms”的引用,则无法命名推断的“用户名”类型

Ram*_*ana 6 typescript angular

forgot-password.component.ts(44,7): 错误 TS2742: 如果没有对“.../node_modules/@angular/forms/forms”的引用,则无法命名推断的“用户名”类型。这可能不是便携式的。类型注释是必要的。

import { Component, Output, EventEmitter } from '@angular/core';
import { Router } from '@angular/router';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { User } from '../../models';
import { ValidateUsername } from '../../validators/userid-validator';

@Component({
  selector: 'app-forgot-password',
  templateUrl: './forgot-password.component.html',
  styleUrls: ['./forgot-password.component.scss']
})
export class ForgotPasswordComponent {
  forgotPasswordForm: FormGroup;
  @Output() resetPassword: EventEmitter<any> = new EventEmitter<any>();
  @Output() onSubmit: EventEmitter<User> = new EventEmitter<User>();
  constructor(private formBuilder: FormBuilder, private router: Router) {
    this.forgotPasswordForm = this.formBuilder.group({
      username: ['', [Validators.required, ValidateUsername]]
    });
  }
  get username() { return this.forgotPasswordForm.get('username'); }
  passwordToken(event$) {
    this.onSubmit.emit(event$.value);
  }
}
Run Code Online (Sandbox Code Playgroud)

在运行应用程序时,我在这一行出现错误 'get username() { return this.forgotPasswordForm.get('username'); }'

Ans*_*Cen 9

消除

"declaration": true,
Run Code Online (Sandbox Code Playgroud)

在你的tsconfig.json

  • 有趣的是,这有效。不过很好奇原因是什么。如果您想构建声明文件怎么办? (4认同)

GKA*_*GKA 6

您需要明确属性的返回类型。

get username(): AbstractControl { return this.forgotPasswordForm.get('username'); }
Run Code Online (Sandbox Code Playgroud)

forgotPasswordForm是一个FormGroup并且它的get()方法返回一个带有以下子类的AbstractControl

子类

  • 表格数组
  • 表单控件
  • 表格组


Kum*_*mar -6

应该尝试有回调类型,就像这样

 get username(): AbstractControl { 
   return this.forgotPasswordForm.get('username'); 
 }
Run Code Online (Sandbox Code Playgroud)

  • 我认为不应该鼓励返回类型“any”。应该使用“字符串” (7认同)