Skip to content

Commit

Permalink
test: adding more tests for strip-types
Browse files Browse the repository at this point in the history
PR-URL: nodejs#54929
Reviewed-By: Marco Ippolito <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
  • Loading branch information
kevinuehara authored and tpoisseau committed Nov 21, 2024
1 parent a095199 commit 40d7f33
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 0 deletions.
33 changes: 33 additions & 0 deletions test/es-module/test-typescript.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -352,3 +352,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);
});
15 changes: 15 additions & 0 deletions test/fixtures/typescript/ts/test-parameter-properties.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
interface Bar {
name: string;
age: number;
}

class Test<T> {
constructor(private value: T) {}

public getValue(): T {
return this.value;
}
}

const foo = new Test<Bar>({ age: 42, name: 'John Doe' });
console.log(foo.getValue());
53 changes: 53 additions & 0 deletions test/fixtures/typescript/ts/test-union-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Use Some Union Types Together
const getTypescript = async () => {
return {
name: 'Hello, TypeScript!',
};
};

type MyNameResult = Awaited<ReturnType<typeof getTypescript>>;
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<RoleAttributes, { role: 'admin' }>;
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<MyType>;

const PartialTypeWithValues: PartialType = {
foo: 'Testing Partial Type',
bar: 42,
zoo: true,
metadata: undefined,
};

console.log(PartialTypeWithValues);

0 comments on commit 40d7f33

Please sign in to comment.