在创建模型驱动的模板时,当我从表单值创建模型对象时.然后模型对象失go 了它的类型.

举个简单的例子:

示范教材:

export class Book {
  public name: string;
  public isbn: string;
}

组成部分:

@Component({
  selector: 'app-book',
  templateUrl: './book.component.html',
  styleUrls: ['./book.component.css']
})
export class BookComponent implements OnInit {

  bookFormGroup: FormGroup;
  private newBook: Book = new Book();

  constructor(private fb: FormBuilder) {
    this.bookFormGroup = this.fb.group({
      name: new FormControl(''),
      isbn: new FormControl('')
    });
  }

  ngOnInit() {
  }

  addBook() {
    console.log('submit');
    this.newBook = <Book> this.bookFormGroup.value;
    console.log(this.newBook instanceof Book);
    console.log(this.newBook);
  }

}

HTML:

<form [formGroup]="bookFormGroup" (ngSubmit)="addBook()">
    <input type="text" formControlName="name" >
    <input type="text" formControlName="isbn" >

    <input type="submit" value="Submit">
</form>

在上面的示例中,在填充newBook个实例后,它将转换为普通Object

即,

this.newBook instanceof Book正在变成FALSE

我该如何防止这种情况?

注意:我试了JSON.parse()次,但还是一样.

推荐答案

此构造函数将与任何类型一起工作,并将分配任何匹配的字段.

export class Book {
  public constructor(init?: Partial<Book>) {
        Object.assign(this, init);
    }
}

所以你可以做到:

this.newBook = new Book(this.bookFormGroup.value);

这将节省你很多工作,如果图书类将有任何变化,在future 变得更大.

Typescript相关问答推荐

我可以让Typescript根据已区分的联合键缩小对象值类型吗?

如何将单元测试中的私有订阅变量设置为空(或未定义)?

使用Angular和API请求在CRUD操作后更新客户端数据的良好实践

为什么typescript要把这个空合并转换成三元?

当使用`type B = A`时,B的类型显示为A.为什么当`type B = A时显示为`any `|用A代替?

如何使用泛型类型访问对象

如何在使用`Next—intl`和`next/link`时导航

为什么tsx不判断名称中有"—"的属性?'

在映射类型中用作索引时,TypeScrip泛型类型参数无法正常工作

TypeScrip表示该类型不可赋值

如何编写一个类型脚本函数,将一个对象映射(转换)为另一个对象并推断返回类型?

Material UI / MUI系统:我如何告诉TypeScript主题是由提供程序传递的?

如何使用类型谓词将类型限制为不可赋值的类型?

如何消除在Next.js中使用Reaction上下文的延迟?

限制返回联合的TS函数的返回类型

TYPE FOR ARRAY,其中每个泛型元素是单独的键类型对,然后在该数组上循环

我怎样才能正确地输入这个函数,使它在没有提供正确的参数时出错

基于闭包类型缩小泛型类型脚本函数的范围

如何为对象数组中的每个条目推断不同的泛型

如何按成员资格排除或 Select 元组?