Help us understand the problem. What is going on with this article?

typescriptでアレがしたい

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を使う

https://github.com/adaltas/node-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を使用する

https://github.com/alexei/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)
  }
}


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away