diff --git a/types/semantic-ui-embed/global.d.ts b/types/semantic-ui-embed/global.d.ts index e851b252a1..c9a096649c 100644 --- a/types/semantic-ui-embed/global.d.ts +++ b/types/semantic-ui-embed/global.d.ts @@ -50,19 +50,43 @@ declare namespace SemanticUI { * Destroys instance and removes all events */ (behavior: 'destroy'): JQuery; - (behavior: 'setting', name: K, value?: undefined): EmbedSettings[K]; - (behavior: 'setting', name: K, value: EmbedSettings[K]): JQuery; - (behavior: 'setting', value: EmbedSettings.Param): JQuery; - (settings?: EmbedSettings.Param): JQuery; + (behavior: 'setting', name: K, value?: undefined): EmbedSettings._Impl[K]; + (behavior: 'setting', name: K, value: EmbedSettings._Impl[K]): JQuery; + (behavior: 'setting', value: EmbedSettings): JQuery; + (settings?: EmbedSettings): JQuery; } /** * @see {@link http://semantic-ui.com/modules/embed.html#/settings} */ - interface EmbedSettings extends Pick { } + type EmbedSettings = EmbedSettings.Param; namespace EmbedSettings { - type Param = EmbedSettings | object; + type Param = (Pick<_Impl, 'url'> | + Pick<_Impl, 'icon'> | + Pick<_Impl, 'source'> | + Pick<_Impl, 'id'> | + Pick<_Impl, 'parameters'> | + Pick<_Impl, 'autoplay'> | + Pick<_Impl, 'color'> | + Pick<_Impl, 'hd'> | + Pick<_Impl, 'brandedUI'> | + Pick<_Impl, 'onCreate'> | + Pick<_Impl, 'onDisplay'> | + Pick<_Impl, 'onPlaceholderDisplay'> | + Pick<_Impl, 'onEmbed'> | + Pick<_Impl, 'selector'> | + Pick<_Impl, 'metadata'> | + Pick<_Impl, 'className'> | + Pick<_Impl, 'templates'> | + Pick<_Impl, 'error'> | + Pick<_Impl, 'namespace'> | + Pick<_Impl, 'name'> | + Pick<_Impl, 'silent'> | + Pick<_Impl, 'debug'> | + Pick<_Impl, 'performance'> | + Pick<_Impl, 'verbose'>) & + Partial>; interface _Impl { /** @@ -216,20 +240,23 @@ declare namespace SemanticUI { } namespace Embed { - interface ParametersSettings extends Pick { } + type ParametersSettings = ParametersSettings._Impl; namespace ParametersSettings { - type Param = ParametersSettings | object; + type Param = _Impl; interface _Impl { [key: string]: any; } } - interface SelectorSettings extends Pick { } + type SelectorSettings = SelectorSettings.Param; namespace SelectorSettings { - type Param = SelectorSettings | object; + type Param = (Pick<_Impl, 'embed'> | + Pick<_Impl, 'placeholder'> | + Pick<_Impl, 'play'>) & + Partial>; interface _Impl { /** @@ -247,10 +274,15 @@ declare namespace SemanticUI { } } - interface MetadataSettings extends Pick { } + type MetadataSettings = MetadataSettings.Param; namespace MetadataSettings { - type Param = MetadataSettings | object; + type Param = (Pick<_Impl, 'id'> | + Pick<_Impl, 'icon'> | + Pick<_Impl, 'placeholder'> | + Pick<_Impl, 'source'> | + Pick<_Impl, 'url'>) & + Partial>; interface _Impl { /** @@ -276,10 +308,12 @@ declare namespace SemanticUI { } } - interface ClassNameSettings extends Pick { } + type ClassNameSettings = ClassNameSettings.Param; namespace ClassNameSettings { - type Param = ClassNameSettings | object; + type Param = (Pick<_Impl, 'active'> | + Pick<_Impl, 'embed'>) & + Partial>; interface _Impl { /** @@ -293,10 +327,12 @@ declare namespace SemanticUI { } } - interface TemplatesSettings extends Pick { } + type TemplatesSettings = TemplatesSettings.Param; namespace TemplatesSettings { - type Param = TemplatesSettings | object; + type Param = (Pick<_Impl, 'iframe'> | + Pick<_Impl, 'placeholder'>) & + Partial>; interface _Impl { /** @@ -310,10 +346,12 @@ declare namespace SemanticUI { } } - interface ErrorSettings extends Pick { } + type ErrorSettings = ErrorSettings.Param; namespace ErrorSettings { - type Param = ErrorSettings | object; + type Param = (Pick<_Impl, 'noURL'> | + Pick<_Impl, 'method'>) & + Partial>; interface _Impl { /** diff --git a/types/semantic-ui-embed/semantic-ui-embed-tests.ts b/types/semantic-ui-embed/semantic-ui-embed-tests.ts index 486092a2a1..63d6769763 100644 --- a/types/semantic-ui-embed/semantic-ui-embed-tests.ts +++ b/types/semantic-ui-embed/semantic-ui-embed-tests.ts @@ -1,5 +1,5 @@ function test_embed_static() { - $.fn.embed.settings.error.method = 'method'; + $.fn.embed.settings.error!.method = 'method'; $.fn.embed.settings.namespace = 'namespace'; $.fn.embed.settings.name = 'name'; $.fn.embed.settings.silent = false; @@ -10,20 +10,21 @@ function test_embed_static() { function test_embed() { const selector = '.ui.embed'; - $(selector).embed('change', 'source', 'id', 'url') === $(); - $(selector).embed('reset') === $(); - $(selector).embed('show') === $(); - $(selector).embed('hide') === $(); - $(selector).embed('get id') === 'get'; - $(selector).embed('get placeholder') === 'get'; - $(selector).embed('get sources') === 'get'; - $(selector).embed('get type') === 'get'; - $(selector).embed('get url') === 'get'; + $(selector).embed('change', 'source', 'id', 'url'); // $ExpectType JQuery + $(selector).embed('reset'); // $ExpectType JQuery + $(selector).embed('show'); // $ExpectType JQuery + $(selector).embed('hide'); // $ExpectType JQuery + $(selector).embed('get id'); // $ExpectType string + $(selector).embed('get placeholder'); // $ExpectType string + $(selector).embed('get sources'); // $ExpectType string + $(selector).embed('get type'); // $ExpectType string + $(selector).embed('get url'); // $ExpectType string $(selector).embed('has placeholder') === true; - $(selector).embed('destroy') === $(); - $(selector).embed('setting', 'debug', undefined) === false; - $(selector).embed('setting', 'debug') === false; - $(selector).embed('setting', 'debug', true) === $(); + $(selector).embed('destroy'); // $ExpectType JQuery + $(selector).embed('setting', 'debug', undefined); // $ExpectType boolean + $(selector).embed('setting', 'debug'); // $ExpectType boolean + $(selector).embed('setting', 'debug', true); // $ExpectType JQuery + // $ExpectType JQuery $(selector).embed('setting', { namespace: 'namespace', name: 'name', @@ -31,7 +32,8 @@ function test_embed() { debug: true, performance: true, verbose: true - }) === $(); + }); + // $ExpectType JQuery $(selector).embed({ url: 'url', icon: 'icon', @@ -45,18 +47,19 @@ function test_embed() { hd: false, brandedUI: true, onCreate(url) { - this === $(); - url === 'url'; + this; // $ExpectType JQuery + url; // $ExpectType string }, onDisplay() { - this === $(); + this; // $ExpectType JQuery }, onPlaceholderDisplay() { - this === $(); + this; // $ExpectType JQuery }, onEmbed(parameters) { - this === $(); - parameters.key = 'value'; + this; // $ExpectType JQuery + parameters; // $ExpectType _Impl + return parameters; }, selector: { @@ -77,26 +80,32 @@ function test_embed() { }, templates: { iframe(url, parameters) { - url === 'url'; - parameters === 'parameters'; - return url + parameters; + url; // $ExpectType string + parameters; // $ExpectType string + + return '
'; }, placeholder(image, icon) { - image === 'image'; - icon === 'icon'; - return image + icon; + image; // $ExpectType string + icon; // $ExpectType string + + return '
'; } }, error: { noURL: 'noURL', method: 'method' } - }) === $(); - $(selector).embed() === $(); + }); + $(selector).embed(); // $ExpectType JQuery + + $(selector).embed('foo'); // $ExpectError + $(selector).embed({ foo: 'bar' }); // $ExpectError } import embed = require('semantic-ui-embed'); function test_module() { + embed; // $ExpectType Embed $.fn.embed = embed; }