Siderで使っているTSLintの設定
今のところこんなんです。
{ "extends": [ "tslint:latest", "tslint-immutable" ], "rules": { "array-type": false, "arrow-parens": false, "interface-name": false, "interface-over-type-literal": false, "max-classes-per-file": false, "max-line-length": false, "member-access": false, "object-literal-key-quotes": [true, "as-needed"], "object-literal-shorthand": false, "object-literal-sort-keys": false, "ordered-imports": false, "quotemark": false, "semicolon": false, "trailing-comma": false, "variable-name": [ true, "ban-keywords", "check-format", "allow-leading-underscore", "allow-pascal-case" ], "whitespace": false, "no-angle-bracket-type-assertion": false, "no-shadowed-variable": false, "no-namespace": false, "readonly-keyword": [true, "ignore-class"], "no-trailing-whitespace": false, "no-implicit-dependencies": [true, ["i18n-js"]], "no-submodule-imports": false } }
特に解説はないのですが、
- スタイル関連は基本的に無効
- なんか怒られる度に無効にしていく
==
って書くと怒るやつは欲しい
みたいな雑な設定でやっています。
一つだけ有効にしているプラグインがあって、tslint-immutableです。これは我々がreduxを使っているからで、stateのためのinterfaceのattributeをimmutableにするのを忘れないようにしています。このプラグインはなかなか便利なのですが、一つ問題があって、ある種の型適用に immutable
と書きたくないという話があります。
こんなん。
const routes = { assignSeat: new ApiRoute<{orgId: number, memberId: number}>( "/api/c/gh/orgs/:orgId/members/:memberId/seat_assignments" ) } const url = routes.assignSeat.stringify({ orgId: 123, memberId: 456 })
このApiRoute
というのは、APIリクエストとかで使うURL生成のためのクラスで、 orgId
に文字列を渡したり null
が入ったりすることを防げる優れものですが、ここでいちいち readonly
と書きたくないという問題があります。良い感じのオプションがないし、どんなときに readonly
と書かなくて良いかしばらく考えたけど判定方法を思いつかないので、もう諦めてしまって誤爆が出ると無視するようにしています。(Siderを使います。)