Записать файл декларации для модуля экспорта по умолчанию
У меня есть модуль npm, называемый RiveScript, который обычно (в Javascript) получает экземпляр таким образом:
var RiveScript = require('rivescript');
var rivescript = new RiveScript();
Я пытаюсь написать файл декларации для модуля, но я застрял на первом шаге. Вот что я написал до сих пор:
declare module "rivescript" {
interface RivescriptOptions {
utf8?: boolean;
}
class RiveScript {
constructor(options?: RivescriptOptions);
}
export default RiveScript;
}
Тогда я предполагаю, что в Typescript я бы использовал модуль таким образом (импорт по умолчанию):
import RiveScript from 'rivescript';
let rivescript = new RiveScript();
Однако tsc
генерирует это, что недопустимо, поскольку оно ссылается на функцию default()
:
const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();
Что я делаю неправильно?
Ответы
Ответ 1
Ты действительно близко. Вместо использования export default
, вы должны использовать export =
.
заказ типизации /rivescript.d.ts
declare module 'rivescript' {
class RiveScript {
constructor()
}
export = RiveScript
}
app.js
import RiveScript = require('rivescript');
let rivescript = new RiveScript();
Для получения дополнительной информации о том, как писать файлы объявлений, вы должны взглянуть на Руководство по Typescript. Например. у них есть шаблон для экспорта модулей как класса.
Ответ 2
Принято anwser хорошо работает для этого вопроса. Но я хочу дать другую идею
если вы хотите расширить класс, добавьте динамический метод в класс во время выполнения.
вы можете попробовать (src/plugins/processor.ts)
import server from '../../server'
declare module "../../server"{
export default interface server{
process() // it a new method of server
}
}
export default class{ //another codes, just for show I create a 'server' instance
private instance:server
constructor{
this.instance = new server()
this.instance.process() //works
}
}
в моем server.ts
(src/server.ts),
моя подпись класса экспорта по умолчанию
export default class Server extends extend implements Startable<void>
Поскольку сервер является default export
, вы можете изменить server
в export default interface server
на любое допустимое имя переменной
например:
export default interface anotherName