Skip to content
This repository has been archived by the owner on Nov 15, 2024. It is now read-only.

安全ではないかもしれないtype predicateについてlint #59

Open
KisaragiEffective opened this issue Aug 9, 2024 · 2 comments

Comments

@KisaragiEffective
Copy link
Member

このプロジェクトでやることではないが、忘れないようにメモ

  • booleanとして推論される式単体を返す関数fの条件部分をifの条件部分にして、その内部で
  • 本来の戻り値型である expr is Type について、Typeを取るIIFEをexprで呼び出す

ことによりtscが満足できる条件かどうか確認する。例えば

function evil(v: 1 | 2): v is 1 {
    return v === 2;
}

はtscによってエラーが出ない。合ってようが間違ってようが全面的にプログラマを信頼するからだ。

しかし、lintする時は内部的に

function testEvil(e: 1 | 2): void {
    if (e === 1) {
        ((_: 2) => {})(e);
    }
}

に変換し、再度型チェックを行う。これは

TS2345: Argument of type 1 is not assignable to parameter of type 2

で型チェックに通らず失敗する。なのでlintされるべきである。

@KisaragiEffective
Copy link
Member Author

プロトタイプできたけど思ったより難しくて草

@KisaragiEffective
Copy link
Member Author

importが機能しないのでその出現場所の直後にブロックをつけてそのあれで変換テストを走らせる

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant