microsoft / microsoft/TypeScript

emit code miss return type in .d.ts ( 3.9.0-dev.20200408 )

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

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

Needs Investigation
主要言語
Go
スター
111k
フォーク
14.3k
平均マージ
2日 4時間
マージ済み PR(30日)
132

説明

TypeScript Version: Version 3.9.0-dev.20200408

Search Terms:

Code

export declare const lifecycleMap: {
	install: {
		readonly name: "install";
		readonly before: readonly ["preinstall"];
		readonly after: readonly ["postinstall", "prepublish", "prepare", "preshrinkwrap", "shrinkwrap", "postshrinkwrap"];
	};
	pack: {
		readonly name: "pack";
		readonly ignoreSelf: true;
		readonly before: readonly ["prepublish", "prepare", "prepack"];
		readonly after: readonly ["postpack"];
	};
	publish: {
		readonly name: "publish";
		readonly before: readonly ["prepublish", "prepare", "prepublishOnly", "prepack", "postpack"];
		readonly after: readonly ["postpublish"];
	};
};

export interface ILifecycleEntry
{
	readonly name: string;
	readonly ignoreSelf?: boolean;
	readonly before: readonly string[];
	readonly after: readonly string[];
}

export type ILifecycleMapKeys = keyof typeof lifecycleMap;

export type ILifecycleMap<K extends string = string> = typeof lifecycleMap & Record<K, ILifecycleEntry>;


export function getLifecycleCore<K extends ILifecycleMapKeys>(scriptName: string | K)
{
	if (isKnownLifecycleKey(scriptName))
	{
		return lifecycleMap[scriptName]
	}

	return (lifecycleMap as ILifecycleMap)[scriptName]
}

export function getLifecycle<K extends string | ILifecycleMapKeys>(scriptName: K)
{
	return getLifecycleCore(scriptName) ?? {
		name: scriptName,
		before: [
			`pre${scriptName}`
		],
		after: [
			`post${scriptName}`
		],
	}
}

export function isKnownLifecycleKey<K extends ILifecycleMapKeys>(scriptName: string | K): scriptName is ILifecycleMapKeys
{
	return scriptName in lifecycleMap
}

tsconfig.json

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es2019",
        "jsx": "preserve",
        "moduleResolution": "node",
        "allowJs": false,
        "allowUmdGlobalAccess": false,
        "sourceMap": true,
        "inlineSourceMap": false,
        "inlineSources": true,
        "declaration": true,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "allowSyntheticDefaultImports": true,
        "resolveJsonModule": true,
        "strict": false,
        "strictBindCallApply": true,
        "strictNullChecks": false,
        "strictFunctionTypes": true,
        "noImplicitThis": true,
        "preserveConstEnums": true,
        "forceConsistentCasingInFileNames": true,
        "incremental": true,
        "noErrorTruncation": true,
        "locale": "zh-TW",
        "removeComments": false,
        "traceResolution": false,
        "newLine": "lf",
        "esModuleInterop": true
    },

Expected behavior:

same as Playground
https://www.typescriptlang.org/v2/en/play?target=6&module=1&ts=3.9.0-beta#code/KYDwDg9gTgLgBAE2AYwDYEMrDsiA7AZ3lQEsAzFATzWAFl0wAuOAbwCgBIEwmdVVZuw4cs6BPlSU4edAFtgzAETcifVIoDcnEcDESpAI2BloCuKPF5JcANqKwWFb36KAuluEX9cdGRjAoZi8rKTtIIic1RQAaOHssMABXA1ICAAsYuIdgMExgTPjgdKhuAGsAdygGAuKyyurY+wgiWrwKqrA3DwBfD1zkUsFtYOsZeSV+0s1h3UtrEgBzPFMAZWBUMmYYKETgDx09ELgjEywg2e8whOTUjMbs3KwCh-QBrpnD619-QPMLo7CzRgk3eHF6nCSKRI6SGnn+ozkZnsN2hGX2I0MxlM50+oUKkNuzwSeSJORR6QA8iFSSD7kCQe4PnMpN8AjjmbYmkQCajQeDwWxQJBYHBuD8yK9sABJAAy5CoNAAonhtpQ2EIMdJEcwiCU8AsPJrFsssGsNgB+ZgGCAQVC6PCG+GY05mTW67gLGyMg4c1m-N3bD1erTdNiC8DQeAwShgaVyijIah2+hgADSwEoBDgAF44KUMxAyHBo7HC3BSAmk3QGFpw8KozG4-LEzQUwAeVNwUD+PAILPu-U5uADhYAPiHJeAZYrCuTDDgADI4AAlFDQBAd2Ky5tV5Wq0e1uuRuBkRJ4ZAwEj4OALYAweOz4AAYVMHa7IB7fbg28rrYY6czUcAAoCGQEowBgAA5bVh0DQcAB84FTABKdVOHIOAgOhVNlnKPAHxbO0AJAsCSAg6D5GQ1COCEHQYESKA8HLHc-zAGxQPAqDEVcThQ04LB6MYzCZ0I6swB8LMf0fFNkPY0jyO4tg+KFY9T3PS9r1ve8WLtN9u2AXt+zghY4EQqTRJTACCGAjiyK48YkNQjU7wYpitIIqsXywEjOIo4BkLgc1zVYbQxjMWyFPkaJtBObFbG0DgAANsgAEhYCL7OAbpEu0VxouEP1mBsBLkqBNKMr87Lcvy0NlIjEU1IvK8mOw3D8J04AAL0j8DK-cyq0sjNrJ8uy-J1YzTMcnV5My0VJI81irLQujXOHGa-NFJiRIGhglLYIA
tsc Version 3.9.0-dev.20200408
node v13.12.0

export declare function getLifecycle<K extends string | ILifecycleMapKeys>(scriptName: K): {
    readonly name: "install";
    readonly before: readonly ["preinstall"];
    readonly after: readonly ["postinstall", "prepublish", "prepare", "preshrinkwrap", "shrinkwrap", "postshrinkwrap"];
} | {
    readonly name: "pack";
    readonly ignoreSelf: true;
    readonly before: readonly ["prepublish", "prepare", "prepack"];
    readonly after: readonly ["postpack"];
} | {
    readonly name: "publish";
    readonly before: readonly ["prepublish", "prepare", "prepublishOnly", "prepack", "postpack"];
    readonly after: readonly ["postpublish"];
} | ILifecycleEntry;

Actual behavior:

export declare function getLifecycle<K extends string | ILifecycleMapKeys>(scriptName: K): {
    readonly name: "install";
    readonly before: readonly ["preinstall"];
    readonly after: readonly ["postinstall", "prepublish", "prepare", "preshrinkwrap", "shrinkwrap", "postshrinkwrap"];
} | {
    readonly name: "publish";
    readonly before: readonly ["prepublish", "prepare", "prepublishOnly", "prepack", "postpack"];
    readonly after: readonly ["postpublish"];
} | ILifecycleEntry;
  export declare function getLifecycle<K extends string | ILifecycleMapKeys>(scriptName: K): {
      readonly name: "install";
      readonly before: readonly ["preinstall"];
      readonly after: readonly ["postinstall", "prepublish", "prepare", "preshrinkwrap", "shrinkwrap", "postshrinkwrap"];
  } | {
-     readonly name: "pack";
-     readonly ignoreSelf: true;
-     readonly before: readonly ["prepublish", "prepare", "prepack"];
-     readonly after: readonly ["postpack"];
- } | {
      readonly name: "publish";
      readonly before: readonly ["prepublish", "prepare", "prepublishOnly", "prepack", "postpack"];
      readonly after: readonly ["postpublish"];
  } | ILifecycleEntry;

Playground Link:

Related Issues:

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

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

はじめの一歩

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

調査の方向性

提供された tsconfig.json を使用して、提供された TypeScript 3.9.0-dev.20200408 の例を実行し、生成された .d.ts を Playground の期待される出力と比較します。推論された getLifecycle の戻り値の型に対する宣言出力を追跡します。生成された宣言が pack バリアントを保持し、期待される動作と一致すれば完了です。

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

評価

技術スタック
typescript
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
48/100

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

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