Расширение и замена существующих интерфейсов в TypeScript - PullRequest
0 голосов
/ 15 января 2020

Я сейчас работаю над плагином для понедельника goose. В качестве части для этого необходимо расширить интерфейс параметров, так как он может содержать дополнительные атрибуты. Для этого я делаю следующее.

Я использую Объявление-слияние , поэтому я создаю файл TypingsFile, подобный этому

SomeTypings.d.ts

declare Interface QueryFindOneAndUpdateOptions {
  MyCustomField: string
}

Также я включил этот файл набора в мой tsconfig. json

tsconfig. json

include : [
  ...
  "./src/types/SomeTypings.d.ts"
]

Печально Это не работает. Объявление слияния работает, только если я объявляю два интерфейса с одинаковым именем в одном и том же файле. Импорт и определение интерфейса вызовет конфликт имен.

Есть идеи, как мне решить эту проблему?

1 Ответ

0 голосов
/ 16 января 2020

ОК, поэтому ответ был довольно простым. В основном я сделал 2 ошибки

  1. Я не объявил модуль, содержащий интерфейс, который я хочу расширить
  2. Я не добавил typeRoots в tsconfig CompilerOptions («include» из моего вопроса не имеет значения для этого)

1 - Набор текста (пн goose .d.ts)

Я создал пн goose .d.ts (имя не является важно, но я предпочитаю называть его как модуль, который я расширяю) файл в . / src / types . Здесь я расширяю свои интерфейсы следующим образом:

mon goose .d.ts

interface SpecialOptions {
  verySpecialStuff: string
  enable: boolean
}

declare module 'mongoose' {
  export interface ModelOptions {
    MyNewKey: SpecialOptions
  }
}

Это расширит существующий интерфейс ModelOptions в mon goose на MyNewKey

2 - Настройка компилятора

По умолчанию компилятор просто проверяет ./node_modules/@types на наличие типов. Таким образом, вы должны указать, чтобы он также включал ваши пользовательские типы. Для этого параметры компилятора должны быть расширены следующим образом:

tsconfig. json

{
// ...
  "compilerOptions" : {
    // ...
    "typeRoots" : [
      "src/types",
      "node_modules/@types"
    ]
  }
}
...