typescriptというかjsのtips集です。
簡単なスニペットを溜めていきます
ローカルのファイルを読み込みたい
node環境限定
解: fs
パッケージを使う
yarn add -D @types/node
import * as fs from 'fs';
// 同期的にバッファを取得
try {
let buffer = fs.readFileSync(path)
console.log(buffer)
} catch(error) {
console.log(`failed to read ${error}`)
}
// 非同期でバッファを取得
async readFile() {
try {
let buffer = fs.readFile(path, () => {})
console.log(buffer)
} catch(error) {
console.log(`failed to read ${error}`)
}
}
// 読み込みストリーム
let stream = fs.createReadStream(path)
stream.on("data", (chunk) => {
console.log(chunk)
})
stream.on("close", () => {
console.log("stream closed")
})
stream.on("error", (error) => {
console.log("stream error")
})
xsvフォーマットのテキストをパースしたい
解: csv-parse
を使う
yarn add csv-parse
import * as fs from 'fs-extra';
import * as parse from 'csv-parse';
private parseTsv(filePath: string): Promise<any[]> {
var result: any[] = []
let parser = parse({delimiter: "\t", columns: true}, (err, data) => {
result = result.concat(data)
})
return new Promise<any[]>((resolve: (value?: any[]) => void, reject: (reason?: any) => void) => {
let stream = fs.createReadStream(filePath)
stream.on("close", () => {
resolve(result)
})
stream.on("error", (err) => {
console.log(err)
reject(err)
})
stream.pipe(parser)
})
}
columns
パラメータにtrue
を渡してあげると、先頭の行をカラム名と解釈してくれる。
そうすると、parseメソッドに渡したクロージャには配列ではなく、先頭の行の項目をキーとしたハッシュが渡ってくるようになる。
書式指定フォーマット(printfのやつ)が使いたい
解: sprintf-js
を使用する
yarn add sprintf-js @types/sprintf-js
let zeroPaddingNumberString = sprintf("%03d", 10)
console.log(zeroPaddingNumberString) // 010が出力される
数値を0埋めしたい
解: String#sliceを使う
010
と出力したい
const n = 10
`00${n}`.slice(-2)
union型を安全に使用する
interface IntroductionPage {
type: "introduction";
}
interface ComicPage {
type: "comic";
index: number;
imageUrl: string;
}
type Page = ComicPage | IntroductionPage;
function renderPage(page: Page) {
// typeをチェックした後に補完が適切な型をサジェストしてくれるようになる。というのが便利
switch (page.type) {
case "introduction":
return renderIntroductionPage();
case "comic;
return renderComicPage(page.index, page.imageUrl)
}
}