【问题标题】:Typescript keyof object doesnt get refined and gives TS2367Typescript keyof 对象没有得到改进并给出 TS2367
【发布时间】:2022-01-15 06:48:53
【问题描述】:

我正在尝试编写一个函数来验证对象的键是否为字符串且不为空。

export const validateRequiredString = <T>(
  obj: T,
  key: keyof T & (string | number)
): void => {
  if (typeof obj[key] !== "string") {
    throw new Error(`${key} is not a string`);
  }
  if (obj[key] === "") {
    throw new Error(`${key} is empty`);
  }
};

但不知道为什么它不让我写这个

file.ts:8:7 - error TS2367: This condition will always return 'false' since the types 'T[keyof T & (string | number)]' and 'string' have no overlap

【问题讨论】:

    标签: typescript typescript-generics


    【解决方案1】:

    我刚刚解决了。

    export const validateRequiredString = <T>(
      obj: T,
      key: keyof T & (string | number)
    ): void => {
      const v = obj[key];
    
      if (!(typeof v === "string")) {
        throw new Error(`${key} is not a string`);
      }
      if (v === "") {
        throw new Error(`${key} is empty`);
      }
    };
    

    已存储v,类型缩小工作。

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 2018-11-09
      • 1970-01-01
      • 2019-08-13
      • 2021-08-28
      • 2023-04-07
      • 1970-01-01
      • 2013-07-06
      • 2021-04-08
      相关资源
      最近更新 更多