首页 > 解决方案 > Typescript - 获取属性类型,编译时间

问题描述

我有时只是喜欢复制属性的类型,而不是直接使用属性的类型。这可能是因为该类型被声明为内联,或者因为我希望它会改变。该属性位于作为名称空间一部分的接口上。

我努力了:

type IIdentity = Contracts.ICustomer.identities[number]

但声称 ICustomer 不是 Contracts 命名空间的成员,这有点误导。

我还尝试了许多 typeof 组合,但都没有结果。

我想出的唯一方法是通过一个虚拟函数和出色的新 ReturnValue 函数,但这似乎过于复杂:

const evilDummy = (x: Contracts.ICustomer) => x.identities[0]
type IIdentity = ReturnType<typeof evilDummy>

有人有更好的方法吗?

标签: typescript

解决方案


您可以使用类型查询:

interface ICustomer{ identities: boolean[] }
type IIdentity = ICustomer['identities'][number] // will be boolean

编辑

或者如果接口在命名空间中

namespace Contracts {
    export interface ICustomer{ identities: boolean[] }
}
type IIdentity = Contracts.ICustomer['identities'][number] // will be boolean

推荐阅读