ts-interface-keys-transformer
is inspired by ts-transformer-keys.
It uses custom transformer to parse the keys in 'interface' and 'type' in compile stage in TypeScript
which support nested keys and optionality.
$ npm i -D typescript ttypescript ts-interface-keys-transformer
and then add following to "compilerOptions" field in tsconfig.json:
"plugins": [
{ "transform": "ts-interface-keys-transformer/transformer" }
]
Use following command to run (assume index.js is the compiled file of index.ts):
$ ttsc -p tsconfig.json && node index.js
import { keys } from 'ts-interface-keys-transformer';
interface Foo {
a: string;
b: number;
c: Bar;
}
interface Bar {
a: string;
b: number;
}
// [
// { name: 'a', optional: false },
// { name: 'b', optional: false },
// { name: 'c', optional: false },
// { name: 'c.a', optional: false },
// { name: 'c.b', optional: false },
//]
console.log(keys<Foo>());
import { keys } from 'ts-interface-keys-transformer';
type Foo = {
a: string;
b: number;
c: Bar;
}
type Bar = {
d: string;
e: number;
f: boolean;
}
// [
// { name: 'a', optional: false },
// { name: 'b', optional: false },
// { name: 'c', optional: false },
// { name: 'c.d', optional: false },
// { name: 'c.e', optional: false },
// { name: 'c.f', optional: false },
//]
console.log(keys<Foo>());
import { keys } from 'ts-interface-keys-transformer';
interface Foo {
a: string;
b: number;
c: Bar;
}
type Bar = {
d: string;
e: number;
f: boolean;
}
// [
// { name: 'a', optional: false },
// { name: 'b', optional: false },
// { name: 'c', optional: false },
// { name: 'c.d', optional: false },
// { name: 'c.e', optional: false },
// { name: 'c.f', optional: false },
//]
console.log(keys<Foo>());
import { keys } from 'ts-interface-keys-transformer';
type Foo = {
a?: string;
b: number;
c: Bar;
}
interface Bar {
d?: string;
e?: number;
f: boolean;
}
// [
// { name: 'a', optional: true },
// { name: 'b', optional: false },
// { name: 'c', optional: false },
// { name: 'c.d', optional: true },
// { name: 'c.e', optional: true },
// { name: 'c.f', optional: false },
//]
console.log(keys<Foo>());
npm test