成角度的“ as”关键字实际上在做什么?

时间:2019-04-24 18:00:24

标签: angular typescript

在以下代码中,我对'as'关键字感到困惑,因为实际上var windowController: NSWindowController? override func viewDidAppear() { super.viewDidAppear() self.view.window?.delegate = self windowController = view.window?.windowController } func windowWillClose(_ notification: Notification) { self.view.window?.windowController // NOT nil } func windowShouldClose(_ sender: NSWindow) -> Bool { self.view.window?.windowController // NOT nil return true } 本身是一个formArray对象,那么为什么我需要再次将formArray作为formArray返回?但是实际上这是真的,因为如果我直接返回this.form.get('topics'),那么它就不能执行某些功能,例如push,controls和removeAt,但是为什么会发生这种情况呢?我尝试同时控制台this.form.get('topics')return this.form.get('topics') as FormArray;的日志,但是仍然得到完全相同的formArray对象,但是为什么呢?为什么它已经是一个formArray我仍然需要将它作为formArray返回才能执行formArray可以执行的某些操作?关键字“ as”做了什么?

return this.form.get('topics')

2 个答案:

答案 0 :(得分:1)

如前所述,这是Type Assertion。这就像强制转换,在代码未提示您知道类型时,告诉编译器类型。

所以这里return this.form.get('topics') as FormArray;

现在,编译器将知道返回的对象是FormArray。这是有益的,因为编译器/ IDE现在将知道对象的形状以及对象的形状和属性。 .length

如果不需要这种样式,可以简化为为函数提供返回类型。该方法称为Type Annotation

public get topics(): FormArray <-- type assigned here. {
    return this.form.get('topics');
}

答案 1 :(得分:1)

等效于

  get topics() : FormArray {
    const result : FormArray  = this.form.get('topics');
    return result;
  }

请参阅 As Usage