開発環境
- macOS Mojave - Apple (OS)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- TypeScript (プログラミング言語)
- Node.js(JavaScriptの実行環境)
Programming TypeScript: Making Your JavaScript Applications Scale (Boris Cherny(著)、O'Reilly Media)のChapter 4(Functions)、Exercises(82)4の解答を求めてみる。
コード
TypeScript
// Array.fromの代替 function f(a, b) { let result = [] for (let i = 0; i < a.length; i+= 1) { result.push(b()) } return result } function call<T extends unknown, R>( f: (arg:T, value:string, ...args:T[]) => R, arg: T, s:string, ...args: T[] ) : R { return f(arg, s, ...args) } function fill(length: number, value: string): string[] { // return Array.from({length}, () => value) return f({length}, () => value) } let a = call(fill, 10, 'a') let b = call(fill, 10, 'z') console.log(a) console.log(b)
入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal)
$ ts-node sample4.ts /opt/local/lib/node_modules/ts-node/src/index.ts:243 return new TSError(diagnosticText, diagnosticCodes) ^ TSError: ⨯ Unable to compile TypeScript: sample4.ts:18:18 - error TS2339: Property 'from' does not exist on type 'ArrayConstructor'. 18 return Array.from({length}, () => value) ~~~~ at createTSError (/opt/local/lib/node_modules/ts-node/src/index.ts:243:12) at reportTSError (/opt/local/lib/node_modules/ts-node/src/index.ts:247:19) at getOutput (/opt/local/lib/node_modules/ts-node/src/index.ts:360:34) at Object.compile (/opt/local/lib/node_modules/ts-node/src/index.ts:393:11) at Module.m._compile (/opt/local/lib/node_modules/ts-node/src/index.ts:439:43) at Module._extensions..js (internal/modules/cjs/loader.js:712:10) at Object.require.extensions.(anonymous function) [as .ts] (/opt/local/lib/node_modules/ts-node/src/index.ts:442:12) at Module.load (internal/modules/cjs/loader.js:600:32) at tryModuleLoad (internal/modules/cjs/loader.js:539:12) at Function.Module._load (internal/modules/cjs/loader.js:531:3) $ ts-node sample4.ts [ 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a' ] [ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z' ] $
Array.fromを使おうとしたらエラーが発生したから、一時的に目的の同じ機能の関数fを定義して回避。
0 コメント:
コメントを投稿