TypeScript:获取动态键控对象中值的类型签名

TypeScript: Getting the type signature of values in a dynamically keyed object

我想在我从库中导入的类型对象中引用值类型,并且不受控制。

我正在使用无服务器 TypeScript 包,它提供了一个名为 AWS 的类型,如下所示:


{
  ...
  functions?: {
    [k: string]: {
      name: string;
      ...
    }
  }
}

我知道可以用 AWS["functions"]

引用整个函数子对象的类型

我的问题是,如何以编程方式请求该子对象的 的子类型?

看下面的代码,用“TYPE_HERE”表示我要填类型的地方

import type { AWS } from "@serverless/typescript";

export default (): TYPE_HERE => ({
  name: "",
  ...
});

当它作为动态键的值 属性 存在时,如何使用根类型甚至类型 AWS["functions"] 来声明类型?

这应该有效:

interface AWS {
  functions?: {
    [k: string]: {
      name: string;
    }
  }
}

type FnType 
  = NonNullable<AWS["functions"]> extends { [K: string]: infer R } ? R : never

const d = (): FnType => ({
  name: "",
  dd: '', // error
});

TS playground