Так что ответ на самом деле зависит от того, как вы собираетесь использовать типы. Если вы используете их в своем собственном проекте, вам нужен файл (с именем <whatever>.d.ts
), который объявляет модуль с именем "airtable"
. В этом вам нужно что-то экспортировать. Поскольку вы экспортируете класс, вы должны использовать синтаксис export = X
вместо export X
, потому что вы изменяете весь объект экспорта, а не добавляете свойство. на объект экспорта (подробнее об этом в секунду). Что касается типов, то вне модуля в вашем файле .d.ts
вы также можете decalre
тип, который станет общедоступным. Если это вас не устраивает (или вы беспокоитесь о конфликтах), вы также можете поместить свой тип в модуль. Так как это только для машинописного текста, его не нужно подкреплять никаким js-кодом. Затем вы можете импортировать / экспортировать его как обычно:
// my.d.ts
declare module 'airtable' {
class Airtable {
constructor(opts?: MyType)
}
export = Airtable
}
declare type MyType = string | number
declare module 'AirtableTypes' {
export type MyString = string
export type MyNumber = number
}
и использование
// index.ts
import Airtable from 'airtable'
import AirtableTypes from 'AirtableTypes'
const a = new Airtable('a')
const n: MyType = 3
const s: AirtableTypes.MyString = '3'
Если вы хотите добавить типы к DefinitelyTyped
(что, я уверен, они оценят!), Вы можете следовать руководству здесь , чтобы создать файл декларации.
Он укажет вам на
Вы (правильно) отметили, что Airtable экспортирует один класс, который не очень хорошо работает с TS. Здесь обсуждается . В любом случае, приведенное выше руководство укажет вам на module-class.d.ts
, что позволит вам объявить экспортируемый класс и сопутствующие типы. Вы не могли использовать это выше, так как формат доступен только когда файлы определений находятся в корне модуля или @types/<module>
.
/*~ This declaration specifies that the class constructor function
*~ is the exported object from the file
*/
export = Airtable
/*~ Write your module's methods and properties in this class */
declare class Airtable {
constructor(opts?: Airtable.AirtableMethodOptions)
}
/*~ If you want to expose types from your module as well, you can
*~ place them in this block.
*/
declare namespace Airtable {
export interface AirtableMethodOptions {
endpointUrl: string
}
}