diff --git a/src/Trait.ts b/src/Trait.ts index 16988cd..e8f5cfd 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -1,7 +1,7 @@ import { Fn } from "hotscript" import { AbstractClass, Class, Simplify } from "type-fest" import { TraitExpression } from "./TraitExpression" -import { Extend, StaticMembers } from "./util" +import { Extend, ExtendPlain, StaticMembers } from "./util" export class Trait< @@ -96,16 +96,18 @@ export namespace Trait { } export namespace Traits { - export type MapImplClass = { + export type MapImplClass = { [K in keyof T]: Trait.OwnImplClass } - export type MapImplInstance = { + export type MapImplInstance = { [K in keyof T]: Trait.OwnImplInstance } - export type MapImplStaticMembers = { - [K in keyof T]: Trait.OwnImplStaticMembers + export type MapImplStaticMembers = { + [K in keyof T]: K extends keyof [] + ? T[K] + : Trait.OwnImplStaticMembers } } @@ -122,7 +124,7 @@ export type TraitConcreteClass> = ( export type TraitInstance> = ( Simplify< - Extend<[ + ExtendPlain<[ Trait.OwnAbstract, Trait.OwnImplInstance, ]> @@ -131,7 +133,7 @@ export type TraitInstance> = ( export type TraitStaticMembers> = ( Simplify< - Extend<[ + ExtendPlain<[ Trait.OwnStaticAbstract, StaticMembers>, ]>