如何在不使用TypeScript的情况下向可用于任何对象键的函数添加类型?

时间:2018-10-15 21:35:46

标签: typescript typescript-typings

我正试图编写一个函数,将TypeScript中对象的键从camelCase转换为snake_case。这是我的代码:

  private convertToSnakeCase (obj: object): object{

    const snakeCasedObject: object = {};

    Object.keys(obj).map((key: string) => {

      const snakeCaseKey: string = _.snakeCase(key);

      snakeCasedObject[snakeCaseKey] = obj[key];
    });

    return snakeCasedObject;
  }

TypeScript编译器会引发以下错误:

  

[ts]元素隐式地具有“ any”类型,因为类型“ {}”没有索引签名。

是否可以在不使用显式any类型的情况下编写这样的函数?我想可以,因为对象键应该始终是字符串吗?

1 个答案:

答案 0 :(得分:2)

这取决于您想要的具体程度。一种解决方案是做类似的事情

type AnyObj = {[key: string]: any};

private convertToSnakeCase(obj: AnyObj): AnyObj {
  // ...
}

我假设您只是希望obj是一个实际的对象,这就是为什么要避免使用any的原因,而不是因为您想不惜一切代价避免使用any