我有时只想复制属性的类型,而不是直接使用属性的类型。这可能是因为类型是内联声明的,或者因为我希望它会改变。该属性位于名称空间的接口上。
我试过了:
type IIdentity = Contracts.ICustomer.identities[number]
但是,声称ICustomer不是Contracts命名空间的成员,这有点误导。
我也尝试了许多类型的组合,都没有结果。
我想出的唯一方法就是通过虚拟函数和出色的新ReturnValue函数,但这看起来过于复杂:
const evilDummy = (x: Contracts.ICustomer) => x.identities[0]
type IIdentity = ReturnType<typeof evilDummy>
任何人都有更好的方法吗?
答案 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