typescript 错误TS 2742:如果不引用...“/node_modules/@angular/forms/forms”,则无法命名“username”的推断类型

lnxxn5zx  于 2023-02-10  发布在  TypeScript
关注(0)|答案(5)|浏览(2105)

我在应用程序中遇到此错误:
forgot-password.component.ts(44,7): error TS2742: The inferred type of 'username' cannot be named without a reference to '.../node_modules/@angular/forms/forms'. This is likely not portable. A type annotation is necessary.

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);
  }
}

错误发生在此行:

get username() { return this.forgotPasswordForm.get('username'); }
pkbketx9

pkbketx91#

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

get username(): AbstractControl { return this.forgotPasswordForm.get('username'); }

forgotPasswordFormFormGroup,其get()方法返回具有以下子类的AbstractControl
子类

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

wlzqhblo2#

当它说
这可能是不可移植的。需要类型注解。
有时你需要检查你的tsconfig.json,看看“baseUrl”,“paths”和链接的包是否有问题。
但在本例中,TS指责您没有键入它,因为它在您的ts配置中,所以您可以将其键入为“any”,为它创建一个接口,或者根据需要键入,在本例中,键入为string。

ejk8hzay

ejk8hzay3#

在我的案例中,我发现了以下修复:

#1将引用导出为类型

// Following is not working:
// export type { ObjectId as _ObjectId } from 'mongodb/node_modules/bson';

import type { ObjectId } from 'mongodb/node_modules/bson';
export type _ObjectId = ObjectId;
  • 我将引用导入为type
  • 我使用_ObjectId作为名称,以避免IDE自动完成它。

#2修复返回类型

这是最糟糕的解决方案!
使用返回类型any,例如:function foo(): any

erhoui1w

erhoui1w4#

我在使用文件系统syncer(代替npm/yarn链接)时遇到过这种情况。
通过不从依赖文件夹复制node_modules文件夹解决了该问题。

h79rfbju

h79rfbju5#

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

get username(): AbstractControl { 
   return this.forgotPasswordForm.get('username'); 
 }

相关问题