Load TS files when running through ts-node, but load the compiled JS files when running through node. Great for typescript applications which dynamically load files (e.g. database migrations, etc.)
npm i ts-import-ts
Create the file you would like to import. Make sure to export default (or see section on named exports below)
test/sample/sample.ts
export default class Sample {
public foo = 'bar';
}And load the file:
src/index.ts
import { tsimport } from 'ts-import-ts';
const sampleClass: any = tsimport('test/sample/sample');
const sampleObject = new sampleClass();
console.log(sampleObject.foo); // Output: barPass a type parameter to tsimport to strongly-type the return value. In this example, tsimport will return foo.
test/sample/sample.ts
const foo: string = 'bar';
export default foo;src/index.ts
import { tsimport } from 'ts-import-ts';
// Importing and typing the return value as a string
const sampleFoo = tsimport<string>('test/sample/sample');
console.log(sampleFoo); // Output: barCreate a base-class:
src/cool-file.ts
export class CoolFile {
foo: string;
}Extend the class in the files you'd like to load:
cool-files/first.ts
import { CoolFile } from '../src/cool-file';
export class FirstCoolFile extends CoolFile {
foo = 'bar';
}Load the files, typing the import as typeof CoolFile:
src/index.ts
import { tsimport } from 'ts-import-ts';
import { CoolFile } from './cool-file';
const loaded = tsimport<typeof CoolFile>('cool-files/first');
const sampleObject = new loaded();
console.log(sampleObject.foo); // Output: barIf a file outputs multiple things, or you don't want to export default, you may pass a name to import as the second argument:
test/sample/sample.ts
export const foo = 'bar';src/index.ts
import { tsimport } from 'ts-import-ts';
// Importing a named export
const namedImport = tsimport('test/sample/sample', 'foo');
console.log(namedImport); // Output: barPass null as a second argument to load an object with all exported things:
test/sample/sample.ts
export const foo = 'bar';
export const baz = 'buzz';src/index.ts
import { tsimport } from 'ts-import-ts';
const imported = tsimport('test/sample/sample', null);
console.log(imported) // Output: { foo: 'bar', baz: 'buzz' }See contributing.md for information on how to develop or contribute to this project!