打字稿中的可选属性类

asv*_*asv 14 properties typescript

我是打字稿的新手,我想知道打字稿中可选属性类的效用是什么?有什么区别:

a?: number;

a: number | undefined;
Run Code Online (Sandbox Code Playgroud)

San*_*wal 24

可选属性:在Typescript中,您可以在接口中声明一个可选的属性.假设您有一个员工界面,中间名是可选的,那么您的代码将如下所示:

interface IEmployee {
  firstName: string;
  lastName: string;
  middleName?: string;
}
Run Code Online (Sandbox Code Playgroud)

当有人使用您的IEmployee接口时,middleName将是可选的,但firstName和lastName是必需的.

let emp: IEmployee = { firstName: "Hohn", lastName: "Doe" }
Run Code Online (Sandbox Code Playgroud)

管道运算符:有时您希望变量可以包含多个类型.如果您将属性声明为数字,则它只能包含数字.管道操作员可以告诉打字稿它可以容纳多种类型.其他情况,当您从函数返回某些东西时,管道运算符非常有用,并且可以根据条件返回多个类型.

希望它会有所帮助

  • 管道运算符也可以在类中使用,但可选属性仅适用于接口。类中没有可选属性的含义。 (2认同)

Fen*_*ton 10

参数

可选参数和参数类型之间的区别在于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();
Run Code Online (Sandbox Code Playgroud)

这适用于函数,方法和构造函数.

严格的空检查

如果您打开严格的空检查,您将发现任何可选参数或属性将自动获得联合类型.这意味着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;
}
Run Code Online (Sandbox Code Playgroud)

我建议使用第一个示例,因为它使属性和参数之间的语法保持一致.