in关键字在打字稿中起什么作用?

jdd*_*dxf 15 typescript

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

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

Tit*_*mir 15

这是标准的inJavsacript运算符。您可以在此处阅读更多文档,但简短的故事是

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

propNameOrNumber in objectName
Run Code Online (Sandbox Code Playgroud)

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

在打字稿的in操作者所描述的也充当型保护这里

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

let q: A | B = ...;
if ('x' in q) {
  // q: A
} else {
  // q: B
}
Run Code Online (Sandbox Code Playgroud)

编辑

inTypescript中的替代含义是映射类型定义。您可以在手册拉取请求中阅读有关它们的信息。在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; }
Run Code Online (Sandbox Code Playgroud)

  • OP 可能指的是 https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types 。问题不够具体。 (3认同)
  • @weakish是的,编译器在那里做了一点作弊,并为它们创建了一个索引签名。从概念上讲,您可以将“字符串”视为所有可能的字符串文字类型的联合(因此基本上是无限联合),因此在这种极限情况下解释仍然成立。(与“number”相同,它是所有可能的数字文字类型的并集) (3认同)