From 52d848ef1cae957511ba47d20a6a04be7b003e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Fri, 4 Sep 2020 21:50:27 +0200 Subject: [PATCH] improve types --- packages/core/src/test.ts | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/core/src/test.ts b/packages/core/src/test.ts index 38e6c0c3..88650e53 100644 --- a/packages/core/src/test.ts +++ b/packages/core/src/test.ts @@ -795,17 +795,11 @@ type Bla = { options: any } -type TypeName = "name" | "schema"; +interface ExtensionExtends { + name: string +} -type ObjectType = - T extends "name" ? string : - T extends "schema" ? (bla: Bla) => NodeSpec : - never; - - - - -class ExtensionTest { +class ExtensionTest { type = 'extension' configs: any = {} options: Partial = {} @@ -828,12 +822,12 @@ class ExtensionTest { return this } - public name(value: string) { + public name(value: Extends['name']) { this.storeConfig('name', value, 'overwrite') return this } - - public extend(key: T, value: ObjectType) { + + public extend>(key: T, value: Extends[T]) { this.storeConfig(key, value, 'extend') return this } @@ -841,17 +835,21 @@ class ExtensionTest { create(options?: Partial) { const self = this - return function(options2?: Partial): ExtensionTest { - return cloneInstance(self as unknown as ExtensionTest) + return function(options2?: Partial): ExtensionTest { + return cloneInstance(self as unknown as ExtensionTest) .storeOptions({...options, ...options2} as Options2) } } } -class NodeTest extends ExtensionTest { +interface NodeExtends extends ExtensionExtends { + schema: (bla: Bla) => NodeSpec +} + +class NodeTest extends ExtensionTest { type = 'node' - public schema(value: (bla: Bla) => NodeSpec) { + public schema(value: NodeExtends['schema']) { this.storeConfig('schema', value, 'overwrite') return this } @@ -866,6 +864,9 @@ const Suggestion = new NodeTest() toDOM: () => ['div', 0] })) .name('suggestion') + .extend('schema', () => ({ + toDOM: () => ['div', 0], + })) .create() interface MentionOptions {