indent-tabs-mode を t にして、tab-width と typescript-indent-level の値を揃えることで、typescript-mode でハードタブが使われるようになる。tide を利用している場合の設定は以下のとおり。
(defun setup-tide-mode ()
;; snip
(setq indent-tabs-mode t)
(setq typescript-indent-level 2)
(setq tab-width 2)
)
(add-hook 'typescript-mode-hook #'setup-tide-mode)
(add-hook 'web-mode-hook
(lambda ()
(when (string-equal "tsx" (file-name-extension buffer-file-name))
(setup-tide-mode))))
prettier を利用することでも実現できたが、遅いのでボツ。
;; https://github.com/prettier/prettier-emacs
(require 'prettier-js)
(add-hook 'typescript-mode-hook 'prettier-js-mode)
(add-hook 'web-mode-hook 'prettier-js-mode)
(setq prettier-js-args '(
"--use-tabs" "true"
))