質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

1回答

2657閲覧

一部のみd.tsを生成して、それをバンドルするにはどうしたらよいか

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2019/01/23 02:18

編集2019/01/30 00:12

※TypeScript公式を見ると、質問あるならStack Overflowでやれと書いてあったので、向こうでも聞いてきます。答えが分かったら愛する日本のためにここにも書きます。

前提・実現したいこと

TypeScriptで構成したプロジェクトにおいて、一部のファイルや関数に限ってd.tsをビルドにより生成し、それをバンドルしたファイルを作成したいです。
生成するファイルのイメージは以下です。

folder

1out 2┣ bundle.js // 全てのコードがバンドルされた実行用JSファイル 3┗ bundle.d.ts // 【見せたいもの】のみの型定義がすべてバンドルされたファイル

npmパッケージとして、動作するJSとinterfaceとなるTS用の型情報だけ提供したいというのが狙いです。

ビルド対象のツリー構成

folder

1src 2┣ main.ts // sub1,sub2をimport 3┣ sub 4┃ ┣ sub1.ts // この中の一部のfunction/classの型情報だけd.tsに出したい 5┃ ┗ sub2.ts // 型情報出力したくない(exportしているものはいくつかある) 6┣ tsconfig.json // "declaration": trueにすると、全部でてきてしまいます。 7┗ webpack.config.js // jsファイルはバンドルできますが、d.tsがバンドルできません。

configファイルの内容

webpack.config.js

javascript

1/** ビルドの共通設定 */ 2module.exports = { 3 mode: "production", 4 entry: { 5 index: "./src/main.ts" 6 }, 7 output: { 8 filename: "[name].js", 9 path: __dirname + "/out" 10 }, 11 12 resolve: { 13 // Add '.ts' and '.tsx' as resolvable extensions. 14 extensions: [".ts", ".js", ".json"], 15 }, 16 17 module: { 18 rules: [ 19 { 20 test: /.ts$/, 21 exclude: /node_modules|vue/src/, 22 use: [ 23 { 24 loader: 'ts-loader', 25 options: { 26 appendTsSuffixTo: [/.vue$/] 27 } 28 }], 29 } 30 ] 31 }, 32};

tsconfig.json

json

1{ 2 "compilerOptions": { 3 "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 4 "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 5 "declaration": true, /* Generates corresponding '.d.ts' file. */ 6 "sourceMap": true, /* Generates corresponding '.map' file. */ 7 "outDir": "./out/", /* Redirect output structure to the directory. */ 8 "rootDir": "./src/", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 9 "strict": true, /* Enable all strict type-checking options. */ 10 "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 11 } 12}

補足情報(FW/ツールのバージョンなど)

  • tsc: Version 3.2.4
  • webpack: Version 4.29.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

正確に質問者の意図を汲み取れているかわかりませんが、
例えばmomentjs等ではpackage.jsonにinterfaceとなる*.d.tsが指定されています。

https://github.com/moment/moment/blob/develop/package.json#L27

このおかげで、npmとしてもinstallできますし、
typescriptとしても@types等を別途インストールせずに
型情報を利用することができます。

必要な型情報をここに記載しておけば、
残りはanyとして参照されるのではないでしょうか。

投稿2019/01/29 11:12

編集2019/01/29 11:14
topiinopii

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/30 05:32

ご回答いただきありがとうございます。 ただ、やりたかったのは、自前のTypeScriptプロジェクトからトランスパイル時にd.tsを生成する段階で、生成を必要な関数にのみ絞ったり、それを結合して1つのd.tsファイルにすることでした。 momentjsはd.tsを手作業で書いているようで、考えているものとは異なりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問