From b9dc68d97bb1d3f9c7e6a32d71690bd4e4e2ea12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 19 Feb 2024 18:23:09 +0100 Subject: [PATCH] Extendable --- src/tests.ts | 7 +++++++ src/util/extend.ts | 29 ++++++++++++++++++----------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 631b011..09fa326 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -2,6 +2,7 @@ import { TraitClass } from "./Trait" import { trait } from "./TraitBuilder" import { Implements, ImplementsStatic, TraitExpressionClass } from "./TraitExpression" import { expression } from "./TraitExpressionBuilder" +import { Extendable } from "./util" const PrintsHelloOnNew = trait @@ -81,3 +82,9 @@ class User extends exp.extends implements Implements { } console.log(new User()) + + +type T = Extendable<[ + { prout: string }, + { prout: "gneugneu" }, +]> diff --git a/src/util/extend.ts b/src/util/extend.ts index b8f2e95..d2a3824 100644 --- a/src/util/extend.ts +++ b/src/util/extend.ts @@ -21,18 +21,25 @@ import { CommonKeys } from "." export type Extend = ( - T extends [infer Super, infer Self, ...infer Rest] - ? Rest extends object[] - ? Pick> extends Pick> - ? Extend<[ - Omit> & Self, - ...Rest, - ]> - : never + T extends [infer Super, infer Self, ...infer Rest extends object[]] + ? Pick> extends Pick> + ? Extend<[ + Omit> & Self, + ...Rest, + ]> : never : T extends [infer Self] - ? Self extends object - ? Self - : never + ? Self : {} ) + +export type Extendable = ( + T extends [infer Super, infer Self, ...infer Rest extends object[]] + ? Pick> extends Pick> + ? Extendable<[ + Omit> & Self, + ...Rest, + ]> + : false + : true +)