Расширение интерфейса экспортируемой переменной в Typescript - PullRequest
0 голосов
/ 02 декабря 2018

Я довольно новичок в TypeScript, и особенно новичок в написании / расширении файлов объявлений для внешних пакетов.

Я использую пакет args npm.Он написан на JavaScript, поэтому его тип объявлен в @types/args.

/** 
 * args/lib/index.js
 */
const publicMethods = {
  option: require('./option'),
  options: require('./options'),
  command: require('./command'),
  parse: require('./parse'),
  example: require('./example'),
  examples: require('./examples'),
  showHelp: require('./help'),
  showVersion: require('./version')
}

function Args() {
  this.details = {
    options: [],
    commands: [],
    examples: []
  }

  /* ... */
}

/* ...assign `publicMethods` to `Args` class... */

module.exports = new Args()
/**
 * @types/args/index.d.ts
 */

declare const c: args;
export = c;

interface args {
    /* ... */
}

/* ... */

Класс args имеет частное свойство с именем details (хотя я и нене знаю, почему это личное), которое не выставляется @types/args.Я хотел бы расширить интерфейс args, чтобы выставить свойство, чтобы я мог перебирать опции, но поскольку экспорт - это переменная, а не модуль, я не понял, как это сделать.

пробовал использовать declare module, namespace, declare namespace, declare const и declare var, с import c from 'args'; и без него.Никто из них не работал, или я сделал их неправильно.

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете попробовать это:

type IyourTypeThatExtendArgs = { myProperty: string } & args;

Этот код создаст для вас новый тип, а тип расширит тип аргументов.Между фигурными скобками вы можете добавить свои собственные свойства, которые будут вместе со свойствами args. & означает тип расширения, который находится рядом с ним с правой стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...