From ce67e7b5b3e72df2f159f6b9efa0830e007f3890 Mon Sep 17 00:00:00 2001 From: Kevin Toshihiro Uehara Date: Tue, 1 Oct 2024 22:23:49 -0300 Subject: [PATCH] test: adding more tests for strip-types PR-URL: https://github.com/nodejs/node/pull/54929 Reviewed-By: Marco Ippolito Reviewed-By: Michael Dawson --- test/es-module/test-typescript.mjs | 33 ++++++++++++ .../ts/test-parameter-properties.ts | 15 ++++++ .../typescript/ts/test-union-types.ts | 53 +++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 test/fixtures/typescript/ts/test-parameter-properties.ts create mode 100644 test/fixtures/typescript/ts/test-union-types.ts diff --git a/test/es-module/test-typescript.mjs b/test/es-module/test-typescript.mjs index e1a1bd81b5ca18..d75da669c4e001 100644 --- a/test/es-module/test-typescript.mjs +++ b/test/es-module/test-typescript.mjs @@ -353,3 +353,36 @@ test('execute a TypeScript test mocking module', { skip: isWindows && process.ar match(result.stdout, /Hello, TypeScript-CommonJS!/); strictEqual(result.code, 0); }); + +test('execute a TypeScript file with union types', async () => { + const result = await spawnPromisified(process.execPath, [ + '--experimental-strip-types', + '--no-warnings', + fixtures.path('typescript/ts/test-union-types.ts'), + ]); + + strictEqual(result.stderr, ''); + strictEqual(result.stdout, + '{' + + " name: 'Hello, TypeScript!' }\n" + + '{ role: \'admin\', permission: \'all\' }\n' + + '{\n foo: \'Testing Partial Type\',\n bar: 42,\n' + + ' zoo: true,\n metadata: undefined\n' + + '}\n'); + strictEqual(result.code, 0); +}); + +test('expect error when executing a TypeScript file with generics', async () => { + const result = await spawnPromisified(process.execPath, [ + '--experimental-strip-types', + fixtures.path('typescript/ts/test-parameter-properties.ts'), + ]); + + // This error should be thrown during transformation + match( + result.stderr, + /TypeScript parameter property is not supported in strip-only mode/ + ); + strictEqual(result.stdout, ''); + strictEqual(result.code, 1); +}); diff --git a/test/fixtures/typescript/ts/test-parameter-properties.ts b/test/fixtures/typescript/ts/test-parameter-properties.ts new file mode 100644 index 00000000000000..5cf79f6f113dd1 --- /dev/null +++ b/test/fixtures/typescript/ts/test-parameter-properties.ts @@ -0,0 +1,15 @@ +interface Bar { + name: string; + age: number; +} + +class Test { + constructor(private value: T) {} + + public getValue(): T { + return this.value; + } +} + +const foo = new Test({ age: 42, name: 'John Doe' }); +console.log(foo.getValue()); diff --git a/test/fixtures/typescript/ts/test-union-types.ts b/test/fixtures/typescript/ts/test-union-types.ts new file mode 100644 index 00000000000000..baa8332d76c2b5 --- /dev/null +++ b/test/fixtures/typescript/ts/test-union-types.ts @@ -0,0 +1,53 @@ +// Use Some Union Types Together +const getTypescript = async () => { + return { + name: 'Hello, TypeScript!', + }; +}; + +type MyNameResult = Awaited>; +const myNameResult: MyNameResult = { + name: 'Hello, TypeScript!', +}; + +console.log(myNameResult); + +type RoleAttributes = + | { + role: 'admin'; + permission: 'all'; + } + | { + role: 'user'; + } + | { + role: 'manager'; + }; + +// Union Type: Extract +type AdminRole = Extract; +const adminRole: AdminRole = { + role: 'admin', + permission: 'all', +}; + +console.log(adminRole); + +type MyType = { + foo: string; + bar: number; + zoo: boolean; + metadata?: unknown; +}; + +// Union Type: Partial +type PartialType = Partial; + +const PartialTypeWithValues: PartialType = { + foo: 'Testing Partial Type', + bar: 42, + zoo: true, + metadata: undefined, +}; + +console.log(PartialTypeWithValues);