From f39a6b9acb1df9247e65b3b0340290c3ddac71f7 Mon Sep 17 00:00:00 2001 From: ersimont <8042088+ersimont@users.noreply.github.com> Date: Fri, 27 Nov 2020 08:22:41 -0500 Subject: [PATCH] feat(js-core): add `Constructor` type to support the mixin pattern --- projects/integration/src/app/api-tests/js-core.spec.ts | 6 ++++++ projects/js-core/src/lib/objects/constructor.ts | 4 ++++ projects/js-core/src/lib/objects/index.ts | 1 + 3 files changed, 11 insertions(+) create mode 100644 projects/js-core/src/lib/objects/constructor.ts diff --git a/projects/integration/src/app/api-tests/js-core.spec.ts b/projects/integration/src/app/api-tests/js-core.spec.ts index be2af844..f2b50131 100644 --- a/projects/integration/src/app/api-tests/js-core.spec.ts +++ b/projects/integration/src/app/api-tests/js-core.spec.ts @@ -1,6 +1,7 @@ import * as jsCore from '@s-libs/js-core'; import { assert, + Constructor, convertTime, createBuilder, Debouncer, @@ -30,6 +31,11 @@ import { keys } from '@s-libs/micro-dash'; describe('js-core', () => { describe('public API', () => { + it('has Constructor', () => { + const constructor: Constructor = Date; + expect(constructor).toBeDefined(); + }); + it('has TimeUnit', () => { expect(TimeUnit).toBeDefined(); }); diff --git a/projects/js-core/src/lib/objects/constructor.ts b/projects/js-core/src/lib/objects/constructor.ts new file mode 100644 index 00000000..20367bcf --- /dev/null +++ b/projects/js-core/src/lib/objects/constructor.ts @@ -0,0 +1,4 @@ +/** + * Taken from the [typescript docs for mixins](https://www.typescriptlang.org/docs/handbook/mixins.html). + */ +export type Constructor = new (...args: any[]) => T; diff --git a/projects/js-core/src/lib/objects/index.ts b/projects/js-core/src/lib/objects/index.ts index c9b9b014..c1744d70 100644 --- a/projects/js-core/src/lib/objects/index.ts +++ b/projects/js-core/src/lib/objects/index.ts @@ -1,3 +1,4 @@ +export { Constructor } from './constructor'; export { createBuilder } from './create-builder'; export { isEqualAtDepth } from './is-equal-at-depth'; export { mapAsKeys } from './map-as-keys';