Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: adding more tests for strip-types #54929

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions test/es-module/test-typescript.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,40 @@ test('execute a JavaScript file importing a cjs TypeScript file', async () => {
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");
kevinuehara marked this conversation as resolved.
Show resolved Hide resolved
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/
kevinuehara marked this conversation as resolved.
Show resolved Hide resolved
);
strictEqual(result.stdout, '');
strictEqual(result.code, 1);
});

// TODO(marco-ippolito) Due to a bug in SWC, the TypeScript loader
// does not work on Windows arm64. This test should be re-enabled
// when https://github.com/nodejs/node/issues/54645 is fixed
Expand Down
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
kevinuehara marked this conversation as resolved.
Show resolved Hide resolved
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);