【问题标题】:What is `as` in the class assigning? [duplicate]类分配中的“as”是什么? [复制]
【发布时间】:2018-09-19 22:26:12
【问题描述】:

我尝试了谷歌并查看了角度文档,但我不知道我在寻找什么。

有人能解释一下这个“as”是什么吗?我在下面的代码中做错了什么?

我有一个在组件B中使用的组件A,并且在b'as'A中声明了一个变量。我尝试使用A中的函数,但是由于函数不存在而出现错误。

A.component.ts;

...

getValue ():Array<string> {
 return this.filter( elm => elm.length > 5 );
}

...

B.component.ts;

...

type C = A;

...

public coolArr: C;

printArr(param: any):void{
 coolArr = param as A;
 console.log(coolArr.getValue);
}

...

不知道我在这里做错了什么。

【问题讨论】:

  • 这与角度无关。 as 关键字来自打字稿。它用于转换类型。请通过这个。希望this 有所帮助。

标签: angular typescript


【解决方案1】:

你的功能:

printArr(param: any):void

接受任何类型。它可能是 null、一个对象、一个数组、任何东西。 (这就是为什么你不应该在你的打字稿代码中依赖any。总是输入正确的类型。)

coolArr = param as A;

在这里你告诉打字稿编译器:那个参数实际上是A类型。就这样对待它。基本上,您说您比编译器更了解并说:相信我,这将是A 类型。这在编译时有效。

您现在遇到的错误是运行时问题。 coolArr 可能仍处于任何状态,因此您的后续期望将不起作用。

【讨论】:

  • 我怎样才能像我想要的那样在参数上将 A 扩展到 B 上?
  • @Kim.LBy 这是一个不同的问题。问一个新的。不过,请先阅读:stackoverflow.com/help/how-to-askstackoverflow.com/help/mcve
  • 谢谢,在我阅读文档并重新阅读您的评论后,它开始点击。如果我在编译时投射我的“参数”,那么我的方法可能会奏效。但是我在这里通过一个any类型的数组并将其强制转换为A类型,这与假设变量是A类型并告诉编译器相信'param'是A类型的相同。跨度>
猜你喜欢
  • 2020-09-18
  • 2020-07-31
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多