Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to export types in a TypeScript npm module

In TypeScript, say I want to have the user use my module's "internal" types so they can properly type their own variables when using my module - do I just export literally everything from my index.ts file to accomplish this?

// index.ts

export * from './file1' // uses types/interfaces defined in file1types
export * from './file2' // uses types/interfaces defined in file2types
export * from './types/file1types'
export * from './types/file2types'

Do .d.ts files help me accomplish this, or are they only for non-TS projects? Does tsconfig.json's option declaration: true help me accomplish this by generating a .d.ts for every TS file? Is this an alternative to exporting everything from a single index.ts file?

And if declaration: true does help me accomplish this, how would the user use all those generated .d.ts files within the build folder?

I would greatly appreciate some clarification as to how one typically exports types in TS projects. Thanks in advance.

like image 460
platizin Avatar asked Mar 16 '20 19:03

platizin


People also ask

Can you export types in TypeScript?

TypeScript supports export = to model the traditional CommonJS and AMD workflow. The export = syntax specifies a single object that is exported from the module. This can be a class, interface, namespace, function, or enum.

How do I export functions in TypeScript?

Use named exports to export a function in TypeScript, e.g. export function sum() {} . The exported function can be imported by using a named import as import {sum} from './another-file' . You can use as many named exports as necessary in a single file.

How do I export a TS class?

Use named exports to export multiple classes in TypeScript, e.g. export class A {} and export class B {} . The exported classes can be imported by using a named import as import {A, B} from './another-file' . You can have as many named exports as necessary in a file.

What is export keyword in TypeScript?

The export keyword in TypeScript is used for exporting variables, constants, classes, functions, and interfaces or type aliases across different files. It becomes very useful for efficient file management across large projects in TypeScript.


2 Answers

Without declaration files you can develop a package in TypeScript, compile it and expose it to other users as JavaScript code. Including them also allows TypeScript developers to use the package with any types you defined in it. They can get more type information whilst working with your library, such as required arguments types, function return types etc, as well as warnings from their IDE/Intellisense when there are conflicts.

The declaration: true in the file tsconfig.json instructs the TypeScript compiler to output declaration files (.d.ts). Often they are bundled in a single file e.g. index.d.ts and then a "types": path/to/index.d.ts field is added to the library's package.json file to inform TypeScript where to look for the types (when a user imports the package).

like image 71
Zwiers Avatar answered Oct 22 '22 13:10

Zwiers


For those who are like me, and have made sure declaration: true is set in your tsconfig.json, and that your build process correctly creates the corresponding .d.ts files to the appropriate directory pointed to by your package.json file, AND STILL somehow can't access the internal types of your module when testing on an external project -- try restarting the TS server in VSCode (assuming you're using VSCode)

enter image description here

So much time was wasted trying to figure this out, only to realize Typescript was functioning fine and I was being sabotaged by my IDE.

like image 9
Wallace Avatar answered Oct 22 '22 12:10

Wallace