【发布时间】:2018-06-05 03:28:47
【问题描述】:
我是打字稿的新手,我想知道打字稿中可选属性类的用途是什么?和有什么区别:
a?: number;
a: number | undefined;
【问题讨论】:
-
typescriptlang.org/docs/handbook/… 给出了您可能希望在哪里使用它们的示例
标签: typescript properties
我是打字稿的新手,我想知道打字稿中可选属性类的用途是什么?和有什么区别:
a?: number;
a: number | undefined;
【问题讨论】:
标签: typescript properties
可选参数和参数类型number | undefined之间的区别在于您不必提供参数...
function a(a?: number) {
return a;
}
function b(a: number | undefined) {
return a;
}
// Okay
a();
b(1);
// Not okay: Expected 1 arguments, but got 0.
b();
这适用于函数、方法和构造函数。
如果您打开严格的空检查,您会发现任何可选参数或属性都会自动获得联合类型。这意味着下面示例中的id 具有number | undefined 类型,即使您只指定了number:
// With strict null checks, this:
class Example {
id?: number;
}
// ... is the same as this:
class Example {
id?: number | undefined;
}
// ... and this:
class Example {
id: number | undefined;
}
我建议使用第一个示例,因为它可以使属性和参数之间的语法保持一致。
【讨论】:
可选属性: 在 Typescript 中,您可以在界面中声明一个属性,该属性是可选的。假设您有一个员工接口并且中间名是可选的,那么您的代码将如下所示:
interface IEmployee {
firstName: string;
lastName: string;
middleName?: string;
}
当有人使用您的接口 IEmployee 时,middleName 将是可选的,但 firstName 和 lastName 是强制性的。
let emp: IEmployee = { firstName: "Hohn", lastName: "Doe" }
管道操作员: 有时您希望一个变量可以包含多种类型。如果您将属性声明为数字,则它只能包含数字。管道运算符可以告诉打字稿它可以容纳多种类型。当您从函数返回某些内容并且可以根据条件返回多种类型时,管道运算符非常有用的其他情况。
希望对你有帮助
【讨论】:
emp.middleName 是否安全?例如,hasMiddle = !!emp.middleName。或者这会导致“emp 没有属性 middleName”之类的问题吗?