typescript 使用括号中的接口分配打字脚本类型,括号的含义是什么?

anauzrmj  于 2023-08-08  发布在  TypeScript
关注(0)|答案(4)|浏览(98)

我有这两个接口

export interface Contact {
  first_name: string;
  last_name: string;
  emails?: (EmailsEntity)[] | null;
  company: string;
  job_title: string;
}
export interface EmailsEntity {
  email: string;
  label: string;
}

字符串
用括号中的EmailsEntity赋值emails?: (EmailsEntity)[] | null;是什么意思?
与这个符号有什么区别:emails?: EmailsEntity[] | null;

gmol1639

gmol16391#

实际上什么都不是。语法方面,它类似于:

emails?: EmailsEntity[] | null;

字符串
在这种情况下,括号的使用是不必要的。只有当涉及到改变操作符的优先级时才需要。阅读更多关于operator precedence的内容,您可能会了解整个情况。

xienkqul

xienkqul2#

(EmailsEntity)[]EmailsEntity[]之间没有差异。Typescript允许(),因为在使用某些类型运算符时,需要修改运算符的默认优先级。除非()是函数签名的一部分,否则它们在类型中没有任何其他含义。

krcsximq

krcsximq3#

下面是一个例子,其中括号确实很重要:

type MyUnion1 = { a: string } | EmailsEntity & { c: boolean }
// {a: string; } | { email: string; label: string; c: boolean; }

type MyUnion2 = ({ a: string } | EmailsEntity) & { c: boolean }
//              ^                            ^ 
// { a: string; c: boolean; } | { email: string; label: string; c: boolean; }

字符串
&(交集)运算符的优先级高于|(并集)运算符。括号将更改优先级。

rjee0c15

rjee0c154#

在给定的示例中,不存在差异。但是,请考虑以下示例:

const b: (string | number)[] = [1, 1];
const a: (string | number)[] = ['Hello!', 'Hello!'];
const c: (string | number)[] = [1, 'Hello!'];

字符串
在上文中,三个数组的类型注解包括parantheses。具有此类型注解的数组可以有所有数字所有字符串,或两者的混合
现在看看这个例子:

const d: string[] | number[] = [1, 1];
const e: string[] | number[] = ['Hello!', 'Hello!'];
// const f: string[] | number[] = [1, 'Hello!']; // ERROR


在此示例中,三个数组的类型注解不包括括号。具有此类型注解的数组可以有所有数字所有字符串,但不能两者的混合**。

相关问题