`in`关键字在打字稿中做什么?

时间:2018-05-07 12:53:01

标签: typescript

我知道如何使用它,但我在文档中找不到任何解释。我想要一个准确的定义,以便我能更好地理解它。

编辑:我的意思是in在映射类型中使用,而不是js运算符。

1 个答案:

答案 0 :(得分:6)

这是标准的in Javsacript运算符。您可以阅读更多文档here,但简短的故事是

  

如果指定的属性在指定的对象中,则in运算符返回true。语法是:

propNameOrNumber in objectName
     

其中propNameOrNumber是表示属性名称或数组索引的字符串或数字表达式,objectName是对象的名称。

在Typescript中,in运算符也充当了here所述的类型保护程序

interface A {
  x: number;
}
interface B {
  y: string;
}

let q: A | B = ...;
if ('x' in q) {
  // q: A
} else {
  // q: B
}

修改

typescript中in的另一种含义是映射类型定义。您可以在handbookpull request中了解相关信息。 in关键字在那里用作语法的一部分,以迭代密钥并集中的所有项。

interface Person {
    name: string;
    age: number;
}
type Partial<T> = {
    [P in keyof T]?: T[P]; // P will be each key of T
}
type PersonPartial = Partial<Person>; // same as { name?: string;  age?: number; }