microsoft / microsoft/TypeScript
Utility type: Object entries tuple
まだ誰も着手していません。
- 主要言語
- Go
- スター
- 111k
- フォーク
- 14.4k
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 117
説明
Search Terms
Utility type, object entries, tuple, mapped type
Suggestion
An Entries<T> utility type that constructs a union of all object entry tuples of type T in lib.es5.d.ts.
/**
* Construct a union of all object entry tuples of type T
*/
type Entries<T> = {
[P in keyof T]: [P, T[P]];
}[keyof T];
Use Cases
I understand the history behind why Object.entries provides string as the key type rather than the actual keys (because there may exist more actual keys that those defined in the type). I refer to discussion here.
Sometimes, however, we can be confident that only properties defined in the type will be present at runtime, and have found that a utility type like this can be helpful to more strictly define such types, particularly in tests.
Examples
const expected = {
foo: "foo",
bar: "Bar",
baz: "BAZ",
} as const;
(Object.entries(expected) as Entries<typeof expected>).forEach(([input, output]) => {
// where `myFunction`'s first parameter only accepts `"foo" | "bar" | "baz"` (or a superset)
expect(myFunction(input)).to.equal(output);
});
function thatAcceptsJsxAttributeTuples(attributes: readonly Entries<JSX.IntrinsicElements["path"][]>): void {
// ...
}
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.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
この提案の対象は lib.es5.d.ts です。まずそこから始め、既存の utility type の宣言と、提案されている Entries の形を比較してください。標準ライブラリに一貫した形で utility type が追加され、issue に記載されているオブジェクトのエントリタプルの例をサポートできれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- compilers
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 35/100