首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何确保(输入)类属性不是未定义的?

如何确保(输入)类属性不是未定义的?
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

复制
相关文章
java退出foreach循环_forEach方法如何跳出循环[通俗易懂]
3.1 foreach()不能使用break和continue这两个关键字,foreach和普通的for循环是不同的,它不是普通的遍历,实现continue的效果可以直接使用return。
全栈程序员站长
2022/09/01
15.1K0
增强For循环(foreach)
(1)只能顺序遍历所有元素,无法实现较为复杂的循环,如在某些条件下需要后退到之前遍历过的某个元素,不能完成
星哥玩云
2022/09/14
2.2K0
cssjshtml js 循环forEach
 js 循环forEach const names=new Array() resp.series.forEach(function (item,index) { names.push(item['name']) })
葫芦
2019/04/17
6.3K0
for和foreach循环语句
今天我们来讲解一下 for跟foreach 一、for 是一个循环语句 for break continue 从 i=0开始,到i=10结束,每次循环 for (i = 1; i <= 10; echo $i; } for (i = 10; i >0; echo $i; } //for可以嵌套 for (i = 1; i <= 10; for (j = 1; j <= 10; continue; echo i.j; } if($i==5) bre
老雷PHP全栈开发
2020/07/02
2.9K0
变相跳出forEach循环
众所周知,forEach循环是无法中途跳出循环的,有点同学说不是可以通过抛出错误跳出循环吗?是的。抛出异常是广为流传的一种方法,结果是我们想要,但是你看代码,哪个正常人会这样写代码?是非forEach不用吗?还是其他的循环关键字不配呢。
骤雨重山
2023/08/13
2030
变相跳出forEach循环
MyBatis xml foreach循环语句
collection指定集合的上下文参数名称比如这里的@Param("list") item指定遍历的每一个数据的变量,一般叫it,可以使用it.userName来获取具体的值 index集合的索引值,从0开始 separator遍历每条记录并添加分隔符 除了批量插入,使用SQL in查询多个用户时也会使用:
FHAdmin
2021/09/14
2.3K0
forEach循环实现卡片列表
jsp页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html lang="en"> <head> <% String path = request.getRequestURI(); Strin
王小婷
2019/05/06
4.3K0
forEach循环实现卡片列表
Parallel.For循环 和 Parallel.ForEach循环
但是,有的时候又不是这样。如果迭代之间彼此独立,并且程序运行在多核处理器的机器上,如果能将不同的迭代放在不同的处理器上并行处理的话,将会受益匪浅。Parallel.For 和 Parallel.ForEach结构就是这样做的。
全栈程序员站长
2022/09/09
2.8K0
Parallel.For循环 和 Parallel.ForEach循环
Java 中for循环和foreach循环哪个更快?
在Java编程中,循环结构是程序员常用的控制流程,而for循环和foreach循环是其中比较常见的两种形式。关于它们哪一个更快的讨论一直存在。本文旨在探究Java中的for循环和foreach循环的性能差异,并帮助读者更好地选择适合自身需求的循环方式。通过详细比较它们的遍历效率、数据结构适用性和编译器优化等因素,我们将为大家揭示它们的差异和适用场景,以便您能够做出更明智的编程决策。
葡萄城控件
2023/10/16
6550
Java 中for循环和foreach循环哪个更快?
Java中的增强 for 循环 foreach
  foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。在
IT可乐
2018/01/04
3.1K0
Java中的增强 for 循环   foreach
JavaScript中如何中断forEach循环
arr.forEach(callback[, thisArg]),callback会接收到三个参数:currentValue、index、array
meteoric
2018/11/20
2.8K0
js 中 forEach 如何跳出循环?
// 1.for方法跳出循环 function getItemByIdFor(arr, id) { var item = null; for (var i = 0; i < arr.length; i++) { console.log("for循环 i", i); if (arr[i].id == id) { item = arr[i]; break; } } return ite
蓓蕾心晴
2022/11/22
8.5K0
perl的foreach循环的坑
最近在写perl脚本的时候用foreach遍历hash的时候,出现遇到了一个问题,就是说当hash为一层的时候,并不会有问题,但是当hash类型结构比较复杂的时候,就会有需要注意的地方了。
纪莫
2019/03/14
1.3K0
foreach跳出本次/当前循环与终止循环方法_js 跳出for循环
forEach无法通过正常流程(如break)终止循环,但可通过抛出异常的方式实现终止循环
全栈程序员站长
2022/11/01
11.1K0
C# foreach循环较for循环的优势与劣势
一、foreach循环的优势 C#支持foreach关键字,foreach在处理集合和数组相对于for存在以下几个优势: 1、foreach语句简洁 2、效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查) 3、不用关心数组的起始索引是几(因为有很多开发者是从其他语言转到C#的,有些语言的起始索引可能是1或者是0) 4、处理多维数组(不包括锯齿数组)更加的方便,代码如下: int[,] nVisited ={ {1,2,3}, {4,5,6
郑小超.
2018/01/26
2.7K0
php foreach跳出本次/当前循环与终止循环方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112380.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
2.4K0
day022: forEach中return有效果吗?如何中断forEach循环?
022: forEach中return有效果吗?如何中断forEach循环? 在forEach中用return不会返回,函数会继续执行。 let nums = [1, 2, 3]; nums.forEach((item, index) => { return;//无效 }) 中断方法: 使用try监视代码块,在需要中断的地方抛出异常。 官方推荐方法(替换方法):用every和some替代forEach函数。every在碰到return false的时候,中止循环。some在碰到return ture的时
用户3806669
2021/03/11
2.5K0
c# 中for和foreach循环的区别
    (2)效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)
vv彭
2020/10/27
4.9K0
c# 中for和foreach循环的区别
Parallel.ForEach 使用多线程遍历循环
原地址路径:https://www.cnblogs.com/personblog/archive/2019/10/09/11640801.html
全栈程序员站长
2022/09/09
1.4K0
Js用forEach语法循环列表
<div class="box"></div> <script> var list = [{ name: 'aa', title: 'bb' }, { name: 'cc', title: 'dd' }, { name: 'ee', title: 'ff' }] var more = '' list.forEach(function (i) { more += ` <div class="item"> <span>${i.name}</s
明知山
2020/09/03
5.1K0

相似问题

PHP Foreach循环未停止

211

forEach循环未返回数组

34

运行Foreach循环Aysnc

20

Foreach循环不会运行

10

无法运行foreach循环。

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文