打字稿 - 获取属性类型,编译时间

时间:2018-05-09 12:06:33

标签: typescript

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

我试过了:

type IIdentity = Contracts.ICustomer.identities[number]

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

我也尝试了许多类型的组合,都没有结果。

我想出的唯一方法就是通过虚拟函数和出色的新ReturnValue函数,但这看起来过于复杂:

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

任何人都有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用类型查询:

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