首页 > 解决方案 > 如何检查我的属性是否存在于类型中

问题描述

据我们所知,打字稿允许我们声明部分类型,但是我们什么时候要检查我的属性是否在 keyof 类型中。让我们来看看

interface Car {
   Brand: string;
   Model: string;
}

type KeyofCar = keyof Car; // Brand, Model

if('Brand' is in KeyofCar) {
   something...
} // I know it doesn't work but it is pseudocode

有没有办法找出来?

标签: typescript

解决方案


我不确定你来这里是为了什么。在您的问题中,您在编译时知道'Brand' keyof Car. 那你为什么要检查呢?

如果类型不完全已知,我可以想象尝试做类似的事情,比如在类型参数中......

function<T>(foo: T) {
  if('bar' in keyof T) {
    // do something...
  }
}

我会说您不会尝试通过将某些内容与keyof T. 而是尝试做这样的事情

interface Car {
  Brand: string;
  Model: string;
}

interface Bus {
  Passengers: number;
  Color: string;
}

function(foo: Car | Bus) {
  if('Brand' in foo) {
    // foo is a Car
  } else {
    // foo is a Bus
  }
}

如果你真的想用钥匙做一些事情,你可以做这样的事情

type CarKey = keyof Car;
const carKeys: CarKey[] = ['Brand', 'Model'];

function(key: string) {
  if(carKeys.includes(key)) {
    // do thing
  }
}

推荐阅读