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);