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

This commit is contained in:
Leonard Thieu
2017-06-30 13:43:32 -04:00
parent 2571300670
commit 2f49c9c475
2 changed files with 35 additions and 15 deletions

View File

@@ -11,16 +11,25 @@ declare namespace SemanticUI {
settings: SiteSettings;
(behavior: 'destroy'): JQuery;
<K extends keyof SiteSettings>(behavior: 'setting', name: K, value?: undefined): SiteSettings[K];
<K extends keyof SiteSettings>(behavior: 'setting', name: K, value: SiteSettings[K]): JQuery;
(behavior: 'setting', value: SiteSettings.Param): JQuery;
(settings?: SiteSettings.Param): JQuery;
<K extends keyof SiteSettings>(behavior: 'setting', name: K, value?: undefined): SiteSettings._Impl[K];
<K extends keyof SiteSettings>(behavior: 'setting', name: K, value: SiteSettings._Impl[K]): JQuery;
(behavior: 'setting', value: SiteSettings): JQuery;
(settings?: SiteSettings): JQuery;
}
interface SiteSettings extends Pick<SiteSettings._Impl, keyof SiteSettings._Impl> { }
type SiteSettings = SiteSettings.Param;
namespace SiteSettings {
type Param = SiteSettings | object;
type Param = (Pick<_Impl, 'modules'> |
Pick<_Impl, 'siteNamespace'> |
Pick<_Impl, 'namespaceStub'> |
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 {
modules: string[];
@@ -68,10 +77,15 @@ declare namespace SemanticUI {
}
namespace Site {
interface NamespaceStubSettings extends Pick<NamespaceStubSettings._Impl, keyof NamespaceStubSettings._Impl> { }
type NamespaceStubSettings = NamespaceStubSettings.Param;
namespace NamespaceStubSettings {
type Param = NamespaceStubSettings | object;
type Param = (Pick<_Impl, 'cache'> |
Pick<_Impl, 'config'> |
Pick<_Impl, 'sections'> |
Pick<_Impl, 'section'> |
Pick<_Impl, 'utilities'>) &
Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
cache: any;

View File

@@ -16,10 +16,11 @@ function test_site_static() {
function test_site() {
const selector = '.ui.site';
$(selector).site('destroy') === $();
$(selector).site('setting', 'debug', undefined) === false;
$(selector).site('setting', 'debug') === false;
$(selector).site('setting', 'debug', true) === $();
$(selector).site('destroy'); // $ExpectType JQuery<HTMLElement>
$(selector).site('setting', 'debug', undefined); // $ExpectType boolean
$(selector).site('setting', 'debug'); // $ExpectType boolean
$(selector).site('setting', 'debug', true); // $ExpectType JQuery<HTMLElement>
// $ExpectType JQuery<HTMLElement>
$(selector).site('setting', {
namespace: 'namespace',
name: 'name',
@@ -27,7 +28,8 @@ function test_site() {
debug: true,
performance: true,
verbose: true
}) === $();
});
// $ExpectType JQuery<HTMLElement>
$(selector).site({
modules: [
'module1',
@@ -41,12 +43,16 @@ function test_site() {
section: {},
utilities: {}
}
}) === $();
$(selector).site() === $();
});
$(selector).site(); // $ExpectType JQuery<HTMLElement>
$(selector).site('foo'); // $ExpectError
$(selector).site({ foo: 'bar' }); // $ExpectError
}
import site = require('semantic-ui-site');
function test_module() {
site; // $ExpectType Site
$.fn.site = site;
}