vue-facing-decorator
Version:
Vue typescript class and decorator based component.
30 lines (22 loc) • 841 B
text/typescript
export const IdentitySymbol: unique symbol = Symbol('vue-facing-decorator-identity')
export type IdentityType = {
props: Record<string, any>
events: Record<string, any>
}
type AssertIs<O, T extends O> = T
export interface Identity<T extends IdentityType = IdentityType> {
[IdentitySymbol]: T
}
export interface IdentityAny<T extends IdentityType = IdentityType> extends Identity<T> {
[index: PropertyKey]: any
}
type MergeRecord<N extends Record<string, any>, O extends Record<string, any>> = {
[I in (keyof N) | (keyof O)]: I extends keyof N ? N[I] : I extends keyof O ? O[I] : never
}
export type MergeIdentityType<N extends IdentityType, O extends IdentityType> = AssertIs<
IdentityType,
{
props: MergeRecord<N['props'], O['props']>
events: MergeRecord<N['events'], O['events']>
}
>