Declaration merge doesn't work after publish as npm module
up vote
1
down vote
favorite
A class AnyId
is defined in core.ts.
In time.ts some more methods are added into it. I extend the type of AnyIf
by declaration merging:
declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}
It works fine in the test case. Typing of additional methods time
and since
are available.
But after the module is published as npm module and being imported, declaration merge doesn't work:
import {anyid} from 'anyid';
anyid().encode('Aa0').time().since(new Date('2018-11-1'));
// ^^^^ error TS2339: Property 'time' does not exist on type 'AnyId'.
typescript
add a comment |
up vote
1
down vote
favorite
A class AnyId
is defined in core.ts.
In time.ts some more methods are added into it. I extend the type of AnyIf
by declaration merging:
declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}
It works fine in the test case. Typing of additional methods time
and since
are available.
But after the module is published as npm module and being imported, declaration merge doesn't work:
import {anyid} from 'anyid';
anyid().encode('Aa0').time().since(new Date('2018-11-1'));
// ^^^^ error TS2339: Property 'time' does not exist on type 'AnyId'.
typescript
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
A class AnyId
is defined in core.ts.
In time.ts some more methods are added into it. I extend the type of AnyIf
by declaration merging:
declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}
It works fine in the test case. Typing of additional methods time
and since
are available.
But after the module is published as npm module and being imported, declaration merge doesn't work:
import {anyid} from 'anyid';
anyid().encode('Aa0').time().since(new Date('2018-11-1'));
// ^^^^ error TS2339: Property 'time' does not exist on type 'AnyId'.
typescript
A class AnyId
is defined in core.ts.
In time.ts some more methods are added into it. I extend the type of AnyIf
by declaration merging:
declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}
It works fine in the test case. Typing of additional methods time
and since
are available.
But after the module is published as npm module and being imported, declaration merge doesn't work:
import {anyid} from 'anyid';
anyid().encode('Aa0').time().since(new Date('2018-11-1'));
// ^^^^ error TS2339: Property 'time' does not exist on type 'AnyId'.
typescript
typescript
asked Nov 8 at 11:16
aleung
5,16613651
5,16613651
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Declaration merging done in time.ts
is not visible when you import from published anyid
module, because published index.d.ts
does not reference time
module at all.
Published index.d.ts
contains only
import { AnyId } from './core';
declare function anyid(): AnyId;
export default anyid;
export { AnyId, anyid };
The line in the source index.ts
which imported Time
from ./time
was elided by the compiler, because Time
is not used as type in any of the declarations emitted in index.d.ts
.
The easiest way to fix it is to add explicit reference to time
in index.ts
, as recommended here, or just re-export Time
:
import { AnyId } from './core';
import { Time } from './time';
import { Random } from './random';
import { Fixed } from './fixed';
import { Sequence } from './seq';
import { Func } from './function';
import { Variable } from './variable';
export { Time } from './time';
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Declaration merging done in time.ts
is not visible when you import from published anyid
module, because published index.d.ts
does not reference time
module at all.
Published index.d.ts
contains only
import { AnyId } from './core';
declare function anyid(): AnyId;
export default anyid;
export { AnyId, anyid };
The line in the source index.ts
which imported Time
from ./time
was elided by the compiler, because Time
is not used as type in any of the declarations emitted in index.d.ts
.
The easiest way to fix it is to add explicit reference to time
in index.ts
, as recommended here, or just re-export Time
:
import { AnyId } from './core';
import { Time } from './time';
import { Random } from './random';
import { Fixed } from './fixed';
import { Sequence } from './seq';
import { Func } from './function';
import { Variable } from './variable';
export { Time } from './time';
add a comment |
up vote
1
down vote
accepted
Declaration merging done in time.ts
is not visible when you import from published anyid
module, because published index.d.ts
does not reference time
module at all.
Published index.d.ts
contains only
import { AnyId } from './core';
declare function anyid(): AnyId;
export default anyid;
export { AnyId, anyid };
The line in the source index.ts
which imported Time
from ./time
was elided by the compiler, because Time
is not used as type in any of the declarations emitted in index.d.ts
.
The easiest way to fix it is to add explicit reference to time
in index.ts
, as recommended here, or just re-export Time
:
import { AnyId } from './core';
import { Time } from './time';
import { Random } from './random';
import { Fixed } from './fixed';
import { Sequence } from './seq';
import { Func } from './function';
import { Variable } from './variable';
export { Time } from './time';
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Declaration merging done in time.ts
is not visible when you import from published anyid
module, because published index.d.ts
does not reference time
module at all.
Published index.d.ts
contains only
import { AnyId } from './core';
declare function anyid(): AnyId;
export default anyid;
export { AnyId, anyid };
The line in the source index.ts
which imported Time
from ./time
was elided by the compiler, because Time
is not used as type in any of the declarations emitted in index.d.ts
.
The easiest way to fix it is to add explicit reference to time
in index.ts
, as recommended here, or just re-export Time
:
import { AnyId } from './core';
import { Time } from './time';
import { Random } from './random';
import { Fixed } from './fixed';
import { Sequence } from './seq';
import { Func } from './function';
import { Variable } from './variable';
export { Time } from './time';
Declaration merging done in time.ts
is not visible when you import from published anyid
module, because published index.d.ts
does not reference time
module at all.
Published index.d.ts
contains only
import { AnyId } from './core';
declare function anyid(): AnyId;
export default anyid;
export { AnyId, anyid };
The line in the source index.ts
which imported Time
from ./time
was elided by the compiler, because Time
is not used as type in any of the declarations emitted in index.d.ts
.
The easiest way to fix it is to add explicit reference to time
in index.ts
, as recommended here, or just re-export Time
:
import { AnyId } from './core';
import { Time } from './time';
import { Random } from './random';
import { Fixed } from './fixed';
import { Sequence } from './seq';
import { Func } from './function';
import { Variable } from './variable';
export { Time } from './time';
edited Nov 8 at 12:34
answered Nov 8 at 12:20
artem
12.9k12437
12.9k12437
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53206656%2fdeclaration-merge-doesnt-work-after-publish-as-npm-module%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown