Nameof Transformer Examples
Use these snippets to apply source transforms before compile and test steps so typed name expressions become static strings.
factory
import { factory, name, version } from '@twin.org/nameof-transformer';
import ts from 'typescript';
const source = `
import { nameof } from '@twin.org/nameof';
class Demo {}
const value = nameof<Demo>();
`;
const result = ts.transpileModule(source, {
transformers: {
before: [factory()]
},
compilerOptions: {
module: ts.ModuleKind.ESNext,
target: ts.ScriptTarget.ES2022
}
});
name; // '@twin.org/nameof-transformer'
version; // current package version
result.outputText.includes("'Demo'"); // true
manual
import { manual } from '@twin.org/nameof-transformer';
const source = `
import { nameof } from '@twin.org/nameof';
interface Customer {
profile?: {
displayName: string;
};
}
const className = nameof<Customer>();
const propName = nameof(({ profile }: Customer) => profile?.displayName);
`;
const transformed = manual(source);
transformed.includes("'Customer'"); // true
transformed.includes("'profile.displayName'"); // true
svelte
import { svelte } from '@twin.org/nameof-transformer';
const transformed = svelte(`
<script lang=\"ts\">
import { nameof } from '@twin.org/nameof';
class Widget {}
const value = nameof<Widget>();
</script>
`);
transformed.includes("'Widget'"); // true