[semantic-ui-embed] Different weak-type workaround.

This commit is contained in:
Leonard Thieu
2017-06-30 11:12:55 -04:00
parent 524cf8e2a9
commit c8cea81010
2 changed files with 94 additions and 47 deletions

View File

@@ -50,19 +50,43 @@ declare namespace SemanticUI {
* Destroys instance and removes all events
*/
(behavior: 'destroy'): JQuery;
<K extends keyof EmbedSettings>(behavior: 'setting', name: K, value?: undefined): EmbedSettings[K];
<K extends keyof EmbedSettings>(behavior: 'setting', name: K, value: EmbedSettings[K]): JQuery;
(behavior: 'setting', value: EmbedSettings.Param): JQuery;
(settings?: EmbedSettings.Param): JQuery;
<K extends keyof EmbedSettings>(behavior: 'setting', name: K, value?: undefined): EmbedSettings._Impl[K];
<K extends keyof EmbedSettings>(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<EmbedSettings._Impl, keyof EmbedSettings._Impl> { }
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<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
@@ -216,20 +240,23 @@ declare namespace SemanticUI {
}
namespace Embed {
interface ParametersSettings extends Pick<ParametersSettings._Impl, keyof ParametersSettings._Impl> { }
type ParametersSettings = ParametersSettings._Impl;
namespace ParametersSettings {
type Param = ParametersSettings | object;
type Param = _Impl;
interface _Impl {
[key: string]: any;
}
}
interface SelectorSettings extends Pick<SelectorSettings._Impl, keyof SelectorSettings._Impl> { }
type SelectorSettings = SelectorSettings.Param;
namespace SelectorSettings {
type Param = SelectorSettings | object;
type Param = (Pick<_Impl, 'embed'> |
Pick<_Impl, 'placeholder'> |
Pick<_Impl, 'play'>) &
Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
@@ -247,10 +274,15 @@ declare namespace SemanticUI {
}
}
interface MetadataSettings extends Pick<MetadataSettings._Impl, keyof MetadataSettings._Impl> { }
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<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
@@ -276,10 +308,12 @@ declare namespace SemanticUI {
}
}
interface ClassNameSettings extends Pick<ClassNameSettings._Impl, keyof ClassNameSettings._Impl> { }
type ClassNameSettings = ClassNameSettings.Param;
namespace ClassNameSettings {
type Param = ClassNameSettings | object;
type Param = (Pick<_Impl, 'active'> |
Pick<_Impl, 'embed'>) &
Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
@@ -293,10 +327,12 @@ declare namespace SemanticUI {
}
}
interface TemplatesSettings extends Pick<TemplatesSettings._Impl, keyof TemplatesSettings._Impl> { }
type TemplatesSettings = TemplatesSettings.Param;
namespace TemplatesSettings {
type Param = TemplatesSettings | object;
type Param = (Pick<_Impl, 'iframe'> |
Pick<_Impl, 'placeholder'>) &
Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
@@ -310,10 +346,12 @@ declare namespace SemanticUI {
}
}
interface ErrorSettings extends Pick<ErrorSettings._Impl, keyof ErrorSettings._Impl> { }
type ErrorSettings = ErrorSettings.Param;
namespace ErrorSettings {
type Param = ErrorSettings | object;
type Param = (Pick<_Impl, 'noURL'> |
Pick<_Impl, 'method'>) &
Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**

View File

@@ -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<HTMLElement>
$(selector).embed('reset'); // $ExpectType JQuery<HTMLElement>
$(selector).embed('show'); // $ExpectType JQuery<HTMLElement>
$(selector).embed('hide'); // $ExpectType JQuery<HTMLElement>
$(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<HTMLElement>
$(selector).embed('setting', 'debug', undefined); // $ExpectType boolean
$(selector).embed('setting', 'debug'); // $ExpectType boolean
$(selector).embed('setting', 'debug', true); // $ExpectType JQuery<HTMLElement>
// $ExpectType JQuery<HTMLElement>
$(selector).embed('setting', {
namespace: 'namespace',
name: 'name',
@@ -31,7 +32,8 @@ function test_embed() {
debug: true,
performance: true,
verbose: true
}) === $();
});
// $ExpectType JQuery<HTMLElement>
$(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<HTMLElement>
url; // $ExpectType string
},
onDisplay() {
this === $();
this; // $ExpectType JQuery<HTMLElement>
},
onPlaceholderDisplay() {
this === $();
this; // $ExpectType JQuery<HTMLElement>
},
onEmbed(parameters) {
this === $();
parameters.key = 'value';
this; // $ExpectType JQuery<HTMLElement>
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 '<div></div>';
},
placeholder(image, icon) {
image === 'image';
icon === 'icon';
return image + icon;
image; // $ExpectType string
icon; // $ExpectType string
return '<div></div>';
}
},
error: {
noURL: 'noURL',
method: 'method'
}
}) === $();
$(selector).embed() === $();
});
$(selector).embed(); // $ExpectType JQuery<HTMLElement>
$(selector).embed('foo'); // $ExpectError
$(selector).embed({ foo: 'bar' }); // $ExpectError
}
import embed = require('semantic-ui-embed');
function test_module() {
embed; // $ExpectType Embed
$.fn.embed = embed;
}