今 @extra-array/binary-search.closest
というpackageを使おうとしています。
このパッケージは型定義ファイルを提供していないので、自作しようとしました。
元のJSは
js
1function by(arr, val, fn, ths, bgn, end) { 2 while(bgn<end) { 3 var m = (bgn+end)>>>1, c = fn.call(ths, arr[m], val, m, arr); 4 if(c<0) bgn = m+1; 5 else if(c>0) end = m; 6 else return m; 7 } 8 return bgn; 9}; 10function binarySearch(arr, val, fn, ths, bgn=0, end=arr.length) { 11 if(fn!=null) return by(arr, val, fn, ths, bgn, end); 12 while(bgn<end) { 13 var m = (bgn+end)>>>1; 14 if(arr[m]<val) bgn = m+1; 15 else if(arr[m]>val) end = m; 16 else return m; 17 } 18 return bgn; 19}; 20module.exports = binarySearch; 21
のようになっています。そこで
ts
1export = binarySearch; 2declare function binarySearch<T, U>( 3 arr: T[], 4 val: T, 5 fn?: null, 6 ths?: any, 7 bgn?: number, 8 end?: number 9): number; 10declare function binarySearch<T, U>( 11 arr: T[], 12 val: U, 13 fn: (e: T, v: U, m?: number, arr?: T[]) => number, 14 ths?: any, 15 bgn?: number, 16 end?: number 17): number;
のように型定義を自作しました。問題はこれをどこに置くかです。
試したのはpackage.json
からみて
@types/@extra-array/binary-search.closest.d.ts
@types/@extra-array/binary-search.closest/index.d.ts
@types/extra-array__binary-search.closest/index.d.ts
ですがどこに置いても型定義を見つけられません。一番最後のときのtsc --traceResolution
の結果は長すぎるので
に置いておきます。
tsconfig.json
は
json
1{ 2 "compilerOptions": { 3 "outDir": "./dist", 4 "rootDir": "./src", 5 "module": "commonjs", 6 "target": "es2017", 7 "declaration": true, 8 "strictNullChecks": true, 9 "typeRoots": [ 10 "@types", 11 "node_modules/@types" 12 ], 13 "esModuleInterop": true 14 }, 15 "include": ["src/**/*"], 16 "exclude": ["node_modules"] 17}
のようにしています。
まあぶっちゃけこの程度のパッケージなら自分で再発明するのも手ではあるんですが、それだと型定義を作る勉強にならないので質問しました。
- そもそも型定義ファイルの中身はこれで合ってるのか
- どこに置けばいいのか
- 追加でなにか設定を書く必要はあるか?その場合の内容
を教えてください。
なお現状の状態は
https://github.com/yumetodo/markdown_img_url_editor/tree/refactor/welcome_typescript
にあります
あなたの回答
tips
プレビュー