Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何确保(输入)类属性不是未定义的?

如何确保(输入)类属性不是未定义的?
EN

Stack Overflow用户
提问于 2020-05-12 13:34:04
回答 2查看 197关注 0票数 0

当我使用Angular和TypeScript时,我尽量写出尽可能精确和严格的代码。回顾一些较旧的代码,我发现了如下代码片段:

代码语言:javascript
运行
AI代码解释
复制
export class UserComponent {

    @Input() user: User;

    getName(): string {
        return this.user.firstname + " " + this.user.lastname;
    }

}

在某个地方,这个组件的用法如下:

代码语言:javascript
运行
AI代码解释
复制
<user-component [user]="u"></user-component>

显然,这样的组件是用来显示用户的,整个GUI依赖于用户实例(值)。

编译器不会抱怨这个定义,即使属性user可能是未定义的。但是,如果另一个开发人员忘记将输入属性user传递给此组件,则在运行时中将出现错误:Trying to access firstname of undefined

您如何解决此问题?就我个人而言,如果没有在custructor中定义属性,我更希望编译器抛出一个错误。或者,有没有一种方法可以“强制”输入属性,这样当使用组件时没有给出输入属性时,编译器/Angular CLI将失败?

到目前为止,我只看到以下选项:

1)将用户属性定义为@Input() user: User | undefined。然后,我们必须在每个使用user属性的方法中编写一个繁琐的if/else。

2)定义@Input() user: User = new User()。但是,我仍然必须以某种方式检查我们是否有一个有效的user实例用于许多用途。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-12 14:49:56

一个可能对您有用的技巧是在选择器中定义具有所有必需字段的组件。在您的情况下,它将是

代码语言:javascript
运行
AI代码解释
复制
@Component({
  selector: 'user-component[user][anotherRequiredField]'
})
票数 1
EN

Stack Overflow用户

发布于 2020-05-12 14:37:45

最简单的方法是使用模板中的安全导航操作符。https://angular.io/guide/template-syntax#the-safe-navigation-operator----and-null-property-paths

{{user?.firstname}}不会抛出错误。

如果需要检查输入,可以使用setter。

代码语言:javascript
运行
AI代码解释
复制
@Input() set user(user: User) {
  if (user) ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61753087

复制
相关文章
jmeter如何确保输入的参数为唯一字段
2、整理好一个文本,把你需要修改的字段全部保存在保存在文本中。(注意:如果需要修改的字段不止一个的话,用英文逗号分隔开) 这边我需要修改发放优惠券的名称,以及金额,可以自定义的去填写自己想要填写的参数。
全栈程序员站长
2022/06/29
1.1K0
jmeter如何确保输入的参数为唯一字段
Java-方法重载时 调用未定义的对象属性
public class TestWayReload { int id; String name; String pwd; public TestWayReload(){ System.out.println(“Hellow World!”); System.out.println("################"); }
Fisherman渔夫
2019/07/30
5.8K0
如何确保线程的执行顺序?
线程的执行顺序是不确定的:在同一个方法中,连续创建多个线程,调用线程的start()方法的顺序并不能决定线程的执行顺序。
编程识堂
2023/05/24
4010
如何确保线程的执行顺序?
CA2350:确保 DataTable.ReadXml() 的输入受信任
反序列化具有不受信任输入的 DataTable 时,攻击者可创建恶意输入来实施拒绝服务攻击。 有可能存在未知的远程代码执行漏洞。
呆呆
2022/02/20
3410
CA2351:确保 DataSet.ReadXml() 的输入受信任
调用或引用了 DataSet.ReadXml 方法,并且该方法不在自动生成的代码内。
呆呆
2022/02/20
3800
如何确保容器的安全性?
对于许多企业来说,容器化使得释放速度更快,比虚拟机更加有效率。与此同时,容器引入了新的部署模式,因此,企业架构师和安全专家需要重新考虑:采取哪些方式来保证应用程序的安全性。在RSA安全会议上,安全专家评估安全实施容器化策略该考虑哪些方面。 安全厂商Bromium的首席技术官Simon Crosby称,传统安全工具仅仅能在云中工作。目前,企业正在关注于容器的另一个抽象层。 Juniper Networks的安全副总裁和首席技术官Chris Hoff说,使用网络和端点安全,保证了企业的区域安全性。同时,也出现了
静一
2018/03/23
8690
优雅地创建未定义类PHP对象
在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式:
硬核项目经理
2019/11/21
2.9K0
如何确保NFS服务安全
上一篇博文《Redhat 设置 NFS 挂载的简单步骤》,其中摘录了一段 nfs 中 fuser 的使用,索性将其全部发出,以供参考。 ---- 对于 NFS 的安全问题,我们是不能掉以轻心的。那么我们如何确保它的安全呢?这里我们首先我们需要分析一下它的不安全性。看看在那些方面体现了它的不安全。NFS 服务安全性分析:不安全性主要体现于以下 4 个方面: 1、新手对 NFS 的访问控制机制难于做到得心应手,控制目标的精确性难以实现 2、NFS 没有真正的用户验证机制,而只有对 RPC/Mount 请求的过程
张戈
2018/03/26
5K1
如何确保虚拟DMZ的云安全
虚拟DMZ的云配置需要特定的安全策略。专家Dejan Lukan分析了不同种类的虚拟DMZ及它们与物理DMZ的差别。 DMZ,或非军事区,是一个主机或小型网络,主要用来将网络隔离成多个区域来加强安全性的设置。这个名词来源于军事用语,是指两个国家之间一块禁止军事活动的区域。DMZ主要用来在对外提供安全的HTTP、FTP、SSH、SMTP等服务的同时将他们保护在内网中。 网络隔离技术有很多种,包括: 物理网络隔离:在两个DMZ之间配置一个网络,让其中的通信只能经由一个安全装置实现。在这个安全装置里面,防火墙及I
静一
2018/03/20
2.3K0
类的受保护属性
创建类时我们希望部分属性不能被外部修改,即创建类的受保护属性。受保护属性可以在类以及子类中读取修改,而外部不能读取。
玖柒的小窝
2021/10/05
9090
Python_类的属性
1.类属性分类 类的属性分为: 数据属性:就是类中的变量; 函数属性:就是类中函数,在面向对象设计中通常称为方法; 类和对象的属性均使用点(.)来访问自己的属性 2.类的属性 类的定义与函数极其相似,我们可以使用函数的作用域来理解类的属性调用方式。 我们可以通过类的属性字典来查询类的属性,如下图所示:
py3study
2020/01/07
1.2K0
Excel实战技巧101:使用条件格式确保输入正确的日期
前言:本文学习整理自chandoo.org,这是一个非常好的Excel学习网站,我在上面学到了很多Excel知识和技巧。
fanjy
2021/03/25
2.8K0
Python类中的属性
通常,在编程中,当某物是公共的时,你可以访问它并使用它;当它是私有的时,你不能。这就像思考某事与说出某事:当你思考某事时,它是你自己的;但是,无论你大声说出什么,它都不再只属于你,而变得公开。
磐创AI
2023/08/29
3100
Python类中的属性
js通过input框输入属性和值,改变div的属性
js实现在input框里面输入属性和值,页面的 div的属性根据输入的属性和值进行变化。
王小婷
2019/03/04
16K0
js通过input框输入属性和值,改变div的属性
如何确保A.I.营养充足
人工智能就像孩子一样,需要合适的教育来激发他们的潜能,也需要合适健康的饮食——高质量的数据。 业务的快速增长亟需人工智能加快判断能力,但是在人工智能的黑盒子里,要考虑的东西很多。人工智能所做出决策的质量和数据质量息息相关。有一句老生常谈的话——“废料只能出废品”,对人工智能来说再合适不过。 为什么呢?比较一下下面两种方式的区别就知道了。一般的分析方案会提供一个特定顺序的结果关系图表。如果你问一个分析程序,为什么北方的销售业绩变差了,你就会得到一系列可能因素的列表:供应链问题、人口变动、社会媒体倾向等。然后需
CSDN技术头条
2018/02/12
4990
RabbitMq如何确保消息不丢失
上篇写了掌握Rabbitmq几个重要概念,从一条消息说起,这篇来总结关于消息丢失让人头痛的事情。网络故障、服务器重启、硬盘损坏等都会导致消息的丢失。消息从生产到消费主要结果以下几个阶段如下图。
李明成
2020/09/27
1.1K0
RabbitMq如何确保消息不丢失
如何确保SDN基础设施的安全
编者按:SDN受到越来越多人的青睐,但是SDN部署迟迟未能落地,主要原因就是企业担心部署冒的风险太大,对基础设施产生很大的影响,因此很多企业抱着观望的态度,那么何为部署SDN最安全的方式呢? 现如今的
SDNLAB
2018/04/04
6320
如何确保SDN基础设施的安全
如何确保uCPE零接触部署
服务提供商正在努力用在通用客户端设备(uCPE)的标准平台上运行的软件来替换客户端设备(CPE)。他们还希望尽量减少在供应链和客户现场建立uCPE所需的步骤。在理想情况下,部署的uCPE不需要用户干预,现场也不需要技术人员。这就是我们所说的零接触。
SDNLAB
2018/07/31
6350
如何确保uCPE零接触部署
如何确保云计算的合规性
云计算的合规性可以确保云计算服务满足用户的合规性要求。但是,采用云计算服务的企业不应假设每个云计算公司都能满足其独特需求,因为他们提供的与合规性相关的服务产品各不相同。
静一
2019/07/22
2.1K0
如何确保云计算的合规性
js类公有属性和私有属性
function Test(){ var name = 'test'//私有 this.age = 12//公有 this.getName = function(){ return name } this.getAge = function(){ return this.age } } var Test = new Test() print(Test.name)//undefined print(Test.age)//12 print(Test.getAge())//12 print
Java架构师必看
2021/08/19
5.6K0

相似问题

确保类不是抽象的

15

确保模板类不是多态的?

29

如何确保只输入int,而不是char?

10

Angular如何确保用户输入不是恶意的?

440

如何确保字符串输入不是数字?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档