انتشار تایپاسکریپت به NPM بدون JS


چگونه فایل *.ts خود را که فقط شامل تعریف نوع و رابط است، در NPM منتشر کنم؟

هیچ تابع، شیء جاوااسکریپت صادر شدهای وجود ندارد.
آیا باید این را حذف کنم؟ "main": "index.js", -یا- جایگزین کنم با "main": "dist/types.ts",

آیا باید *.ts را به *.d.ts کامپایل کنم؟

types.js:

export type Optional<T>                    = T|null|undefined
export type OptionalOrFalse<T>             = Optional<T|false>
export type SingleOrArray<T>               = T|T[]

export type DeepArray<T>                   = (T|DeepArray<T>)[] // ===       T[]  |  T[][]  |  T[][][]  |  ...
export type SingleOrDeepArray<T>           = T|DeepArray<T>     // === T  |  T[]  |  T[][]  |  T[][][]  |  ...

export type Factory<T>                     = () => T
export type ProductOrFactory<T>            = T|Factory<T>
export type ProductOrFactoryDeepArray<T>   = (ProductOrFactory<T> | ProductOrFactoryDeepArray<T>)[] // ===         T[]|F[]  |  T[][]|F[][]  |  T[][][]|F[][][]  |  ...
export type ProductOrFactoryOrDeepArray<T> =  ProductOrFactory<T> | ProductOrFactoryDeepArray<T>    // === T|F  |  T[]|F[]  |  T[][]|F[][]  |  T[][][]|F[][][]  |  ...

export type Dictionary<TValue>             = { [key: string]: TValue }
export type ValueOf<TDictionary>           = TDictionary[keyof TDictionary]
export type DictionaryOf<TDictionary>      = Dictionary<ValueOf<TDictionary>>

پاسخ شماره ۱

من نگاهی به مثالهای موجود در DefinitelyTyped (مثلاً بستههای @types/...) میاندازم.

بر اساس این، من معتقدم:

  • "main" میتواند یک رشتهی خالی ("") باشد
  • "types" باید به "index.d.ts" شما اشاره کند
  • بستهی شما نباید شامل هیچ فایل *.ts باشد (در عوض باید شامل فایلهای *.d.ts باشد)

این ممکن است همچنین مفید باشد که بخوانید: https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html