Skip to content

Type-check Import Attributes in static importsΒ #55994

Closed
@mkubilayk

Description

@mkubilayk

πŸ” Search Terms

import attributes, import assertions

βœ… Viability Checklist

  • This wouldn't be a breaking change in existing TypeScript/JavaScript code
  • This wouldn't change the runtime behavior of existing JavaScript code
  • This could be implemented without emitting different JS based on the types of the expressions
  • This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
  • This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals

⭐ Suggestion

TypeScript 5.3 Beta supports the latest updates to the import attributes proposal, which is great to see!

It's possible to augment the global ImportAttributes type with host-specific attributes. However, auto-complete and type-checking of import attributes seems to only work with dynamic import(). It would be nice if this could also work for attributes in static declarations.

πŸ“ƒ Motivating Example

https://www.typescriptlang.org/play?target=99&ts=5.3.0-dev.20231002#code/CYUwxgNghgTiAEBzCB7ARlC8DeBYAUPPAJYB2ALiDAGZRgLwCSAtgA4ozkCC55MxaAK6UAzjgJEi5AJ6sQALngAiAFYiUpJRPgBfAnvwFibDuXgAqeFDGkx1GCmbLqKFEvgB3YuQAWOeDJyikqkKOQAtGoa7joA3AQAbijEwPC28Yb4xuycABRKLm4ANOKEnt4+inhlUrIKyqERUZraBjoAlBkEQA

declare global {
    interface ImportAttributes {
        type: "json";
    }
}

import * as ns from "foo" with { type: "not-json" }; // no error
void ns;

import("foo", {
    with: {
        type: "not-json", // Type '"not-json"' is not assignable to type '"json"'. (2322)
    },
});

πŸ’» Use Cases

  1. What do you want to use this for?

https://github.com/tc39/proposal-import-attributes#motivation

In addition, we have an internal use case in Bloomberg to use Import Attributes as an annotation to achieve lazy-loading by deferring module evaluation. This is an early implementation of the TC39 proposal for Deferring Module Evaluation that annotates the static import.

It would be a better developer experience if auto-complete was available for Import Attributes in the static form.

  1. What shortcomings exist with current approaches?

It is possible to write a static import declaration using unknown/invalid attributes.

  1. What workarounds are you using in the meantime?

None.

Metadata

Metadata

Assignees

No one assigned

    Labels

    CommittedThe team has roadmapped this issueHelp WantedYou can do thisSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions