可选属性与非可选属性?

时间:2018-07-19 07:21:50

标签: typescript

说我想创建一个类型为CoolObject的数组。如果某些对象具有属性format,而某些对象没有属性,哪种方法会更好?

// Approach 1
   export interface CoolObject {
     name: string;
     color: string;
     format? string;
    }

// Approach 2
    export interface CoolObject {
     name: string;
     color: string;
     format: string;
    }

在第二种方法中,我可以检查format属性是否具有值。

3 个答案:

答案 0 :(得分:0)

  

如果属性format不在所有对象中,请使用   以下:-

export interface CoolObject {
  name    : string;
  color   : string;
  format ?: string;
}

答案 1 :(得分:0)

第二个版本告诉编译器该属性将始终存在,因此绝对不是表示该属性为可选的好方法。 ?是表示属性的可选方式:

export interface CoolObject {
 name: string;
 color: string;
 format? string;
}

如果您拥有striuctNullChecks打字稿,甚至会在尝试访问该打字稿时强制您验证该属性是否已定义

答案 2 :(得分:0)

就像同事说的,

export interface CoolObject {
  name    : string;
  color   : string;
  format ?: string;
}

是一种便捷的方式。

如果它是一个性能非常高的应用程序,那么我会更加努力

export interface CoolObject {
      name    : string;
      color   : string;
      format  : string;
    }

并设置format = undefined(如果未使用)。

原因是Javascript编译器针对“相等结构的对象”进行了优化 所以对象

{ 
  name: 'LALALA'
  color: 'blue
}

{ 
  name: 'James Blond'
  color: 'rose'
}

在结构上相等

{ 
  name: 'LALALA'
  color: 'blue
}

{ 
  name: 'James Blond'
  color: 'rose'
  format: 'lowlevel'
}

不是。

但是...我们谈论的是非常很少的用例所需要的优化。 因此,我会坚持使用format ?: string,因为它很容易实现和阅读。

热烈的问候