说我想创建一个类型为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属性是否具有值。
答案 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
,因为它很容易实现和阅读。
热烈的问候