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

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

@KisaragiEffective

Description

@KisaragiEffective

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

  • 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されるべきである。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions