Skip to content

swc cannot parse declare imports used to declare node builtins in REPL #1538

@cspotcode

Description

@cspotcode

We tell the typechecker that node builtin modules are available in the REPL without importing, using declare import assert = require('assert'); Implemented in #1500

Unfortunately, swc cannot parse declare import and it seems this is because it's technically invalid TS. It achieves the desired effect when using the TS compiler -- we use @ts-ignore to suppress the error -- but I think we'll need to disable it for swc and any third-party transpilers.

We should also consider test coverage of the REPL with swc.


An alternative syntax I considered when writing #1500:

declare const fs: typeof import('fs');
// @ts-ignore
import type * as fs from 'fs';

I decided against it because if you subsequently attempt to const fs = 123; you get a type error.


Thinking we'll have to keep the syntax as-is, but disable it when in transpileOnly mode. Implementation notes: since transpileOnly mode is implied by other options, such as swc, we must make sure we have the real answer when checking transpileOnly === true in the REPL.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions