How to augment class declared but not exported on Typescript module
up vote
2
down vote
favorite
The hubot
type definitions have the following class:
declare namespace Hubot {
// ...
class Message {
user: User;
text: string;
id: string;
}
// ...
}
// Compatibility with CommonJS syntax exported by Hubot's CoffeeScript.
// tslint:disable-next-line export-just-namespace
export = Hubot;
export as namespace Hubot;
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/a6b283d1d43d8c7c82a4a4e22d0fc27c9964154c/types/hubot/index.d.ts#L18-L22
I want to augment the Message
class from my code, inside a hubot.d.ts
file I've written:
import * as hubot from 'hubot';
declare namespace Hubot {
export class Message {
mentions: string
}
}
But it does not works:
The hubot.d.ts
file is included in the code by having
"files": ["types/custom/hubot.d.ts"]
In the tsconfig.json
file.
What I'm missing? Any way to do that?
javascript typescript types
add a comment |
up vote
2
down vote
favorite
The hubot
type definitions have the following class:
declare namespace Hubot {
// ...
class Message {
user: User;
text: string;
id: string;
}
// ...
}
// Compatibility with CommonJS syntax exported by Hubot's CoffeeScript.
// tslint:disable-next-line export-just-namespace
export = Hubot;
export as namespace Hubot;
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/a6b283d1d43d8c7c82a4a4e22d0fc27c9964154c/types/hubot/index.d.ts#L18-L22
I want to augment the Message
class from my code, inside a hubot.d.ts
file I've written:
import * as hubot from 'hubot';
declare namespace Hubot {
export class Message {
mentions: string
}
}
But it does not works:
The hubot.d.ts
file is included in the code by having
"files": ["types/custom/hubot.d.ts"]
In the tsconfig.json
file.
What I'm missing? Any way to do that?
javascript typescript types
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
The hubot
type definitions have the following class:
declare namespace Hubot {
// ...
class Message {
user: User;
text: string;
id: string;
}
// ...
}
// Compatibility with CommonJS syntax exported by Hubot's CoffeeScript.
// tslint:disable-next-line export-just-namespace
export = Hubot;
export as namespace Hubot;
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/a6b283d1d43d8c7c82a4a4e22d0fc27c9964154c/types/hubot/index.d.ts#L18-L22
I want to augment the Message
class from my code, inside a hubot.d.ts
file I've written:
import * as hubot from 'hubot';
declare namespace Hubot {
export class Message {
mentions: string
}
}
But it does not works:
The hubot.d.ts
file is included in the code by having
"files": ["types/custom/hubot.d.ts"]
In the tsconfig.json
file.
What I'm missing? Any way to do that?
javascript typescript types
The hubot
type definitions have the following class:
declare namespace Hubot {
// ...
class Message {
user: User;
text: string;
id: string;
}
// ...
}
// Compatibility with CommonJS syntax exported by Hubot's CoffeeScript.
// tslint:disable-next-line export-just-namespace
export = Hubot;
export as namespace Hubot;
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/a6b283d1d43d8c7c82a4a4e22d0fc27c9964154c/types/hubot/index.d.ts#L18-L22
I want to augment the Message
class from my code, inside a hubot.d.ts
file I've written:
import * as hubot from 'hubot';
declare namespace Hubot {
export class Message {
mentions: string
}
}
But it does not works:
The hubot.d.ts
file is included in the code by having
"files": ["types/custom/hubot.d.ts"]
In the tsconfig.json
file.
What I'm missing? Any way to do that?
javascript typescript types
javascript typescript types
asked Nov 16 at 21:05
JCM
5,53533857
5,53533857
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
hubot.d.ts
should contain:
// This import serves no purpose except to make the file a module
// (so that the following statement is a module augmentation rather
// than a module declaration) and could be replaced with `export {}`.
import * as hubot from 'hubot';
declare module "hubot" {
interface Message {
mentions: string
}
}
A module augmentation is needed to add declarations to the hubot
module. Since the Hubot
namespace is assigned as the export of the module, any augmentations made to the module will target that namespace directly; writing another namespace Hubot { ... }
in the augmentation would create a nested namespace, which isn't what you want. Finally, declaring a class gives a "duplicate identifier" error, while declaring an interface is sufficient to add properties.
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
hubot.d.ts
should contain:
// This import serves no purpose except to make the file a module
// (so that the following statement is a module augmentation rather
// than a module declaration) and could be replaced with `export {}`.
import * as hubot from 'hubot';
declare module "hubot" {
interface Message {
mentions: string
}
}
A module augmentation is needed to add declarations to the hubot
module. Since the Hubot
namespace is assigned as the export of the module, any augmentations made to the module will target that namespace directly; writing another namespace Hubot { ... }
in the augmentation would create a nested namespace, which isn't what you want. Finally, declaring a class gives a "duplicate identifier" error, while declaring an interface is sufficient to add properties.
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
add a comment |
up vote
3
down vote
accepted
hubot.d.ts
should contain:
// This import serves no purpose except to make the file a module
// (so that the following statement is a module augmentation rather
// than a module declaration) and could be replaced with `export {}`.
import * as hubot from 'hubot';
declare module "hubot" {
interface Message {
mentions: string
}
}
A module augmentation is needed to add declarations to the hubot
module. Since the Hubot
namespace is assigned as the export of the module, any augmentations made to the module will target that namespace directly; writing another namespace Hubot { ... }
in the augmentation would create a nested namespace, which isn't what you want. Finally, declaring a class gives a "duplicate identifier" error, while declaring an interface is sufficient to add properties.
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
hubot.d.ts
should contain:
// This import serves no purpose except to make the file a module
// (so that the following statement is a module augmentation rather
// than a module declaration) and could be replaced with `export {}`.
import * as hubot from 'hubot';
declare module "hubot" {
interface Message {
mentions: string
}
}
A module augmentation is needed to add declarations to the hubot
module. Since the Hubot
namespace is assigned as the export of the module, any augmentations made to the module will target that namespace directly; writing another namespace Hubot { ... }
in the augmentation would create a nested namespace, which isn't what you want. Finally, declaring a class gives a "duplicate identifier" error, while declaring an interface is sufficient to add properties.
hubot.d.ts
should contain:
// This import serves no purpose except to make the file a module
// (so that the following statement is a module augmentation rather
// than a module declaration) and could be replaced with `export {}`.
import * as hubot from 'hubot';
declare module "hubot" {
interface Message {
mentions: string
}
}
A module augmentation is needed to add declarations to the hubot
module. Since the Hubot
namespace is assigned as the export of the module, any augmentations made to the module will target that namespace directly; writing another namespace Hubot { ... }
in the augmentation would create a nested namespace, which isn't what you want. Finally, declaring a class gives a "duplicate identifier" error, while declaring an interface is sufficient to add properties.
answered Nov 16 at 22:01
Matt McCutchen
12.9k719
12.9k719
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
add a comment |
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
Thanks, worked perfectly, and thanks for the explanation. It makes sense now.
– JCM
2 days ago
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%2f53345357%2fhow-to-augment-class-declared-but-not-exported-on-typescript-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