microsoft / microsoft/TypeScript

Clean up syntax for importing and using nested type declarations

オープン
#39,935 コメント 2 件 リアクション 2 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Awaiting More Feedback Suggestion
主要言語
Go
スター
111k
フォーク
14.4k
平均マージ
1日 19時間
マージ済み PR(30日)
117

説明

Search Terms

  • import
  • import equals
  • nested import

Suggestion

The current syntax for importing nested modules is confusing. For example, to specifically use a single property from an interface I would need to do something like this:

// interface.ts
interface Example {
    Foo: string
}

// file.ts
import { Example } from 'interface.ts';
import Foo = Example.Foo // this is weird, as I'm not actually importing any resource here

From what I understand, import is not importing anything here. It's confusing and looks like it's doing something totally different at first glance. In this case, I could also use type Bind = interfaces.Bind, but I don't want to create a new resource.

A much nicer syntax would be adding a use or take keyword, or adding support for importing nested modules

Use Cases

This suggestion is just for readability and developer experience.

Examples

Importing nested modules with use or take

// interface.ts
interface Example {
    Foo: string
}

// file.ts
import { Example } from 'interface.ts';
take { Foo } from Example;

importing nested interface/namespace values:

// interface.ts
interface Example {
    Foo: string
}

// file.ts
import { Example: { Foo } } from 'interface.ts';

Checklist

My suggestion meets these guidelines:

  • 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, etc.)
  • This feature would agree with the rest of TypeScript's Design Goals.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

interface.ts と file.ts にあるネストされた宣言の例を確認します。既存の import-equals 形式と、提案されている use、take、nested-import 形式も含めます。実装を検討する前に、意図された構文と型チェックの動作を明確にします。完了とするには、合意された設計とコンパイラーおよびリグレッションテストが必要になりますが、issue ではそのいずれも特定されていません。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
typescript
領域
compilers
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。