我有像这样的课

class RegisterDto {
  phone: Nullable<string> = null;
  name?: string;

  constructor() {
    console.log(this);
  }
}

new RegisterDto();

"名称"字段是可选的.如果我在浏览器控制台中运行这段代码,我会得到应有的{phone: null, name: undefined}.如果我在RN中运行这段代码,我只能得到{phone: null}

我哪里错了?

推荐答案

在TypeScrip中,如果您没有初始化一个字段,那么该字段将在转换后的类声明中被删除.在您的示例中,您的TypeScrip类转换为以下JavaScript代码,这是最终在您的ReactNative项目中运行的代码:

class RegisterDto {
  constructor() {
    this.phone = null;
    console.log(this);
  }
}

由于没有设置name字段,因此在生成的关联JS代码中看不到设置了name.

另一方面,当您从class中删除类型批注并在控制台中运行代码时,您现在使用的是JavaScript的public class field语法.在这种情况下,当一个公共类字段没有被初始化为一个值时,它的缺省值为undefined,这与使用TypeScrip不同,后者将完全取消属性的初始化.


要使您的TypeScrip代码以相同的方式运行,可以将属性初始化为undefined:

name?: string = undefined;

现在,name将被定义为实例上的Owner-Property,其值将为undefined.

Javascript相关问答推荐

React:未调用useState变量在调试器的事件处理程序中不可用

如何访问Json返回的ASP.NET Core 6中的导航图像属性

Next.js(react)使用moment或不使用日期和时间格式

如何在Obsidian dataview中创建进度条

如何为我的astro页面中的相同组件自动创建不同的内容?

在服务器上放置了Create Reaction App Build之后的空白页面

在带有背景图像和圆形的div中添加长方体阴影时的重影线

在JS中拖放:检测文件

Angular 中的类型错误上不存在获取属性

Chart.js-显示值应该在其中的引用区域

编辑文本无响应.onClick(扩展脚本)

我怎么在JS里连续加2个骰子的和呢?

使用getBorbingClientRect()更改绝对元素位置

使用自动识别发出信号(&Q)

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值

如何在Java脚本中对数据进行签名,并在PHP中验证签名?

MongoDB中的嵌套搜索

Jexl to LowerCase()和Replace()

无法在Adyen自定义卡安全字段创建中使用自定义占位符

Select 所有输入.值