Skip to content

Suggestion: Export some internal type checking helpers #19602

Description

I'm trying to implement a tslint custom rule to manually force and check yield typings inside of generator-based sagas from redux-saga. As the statuses of #2983 and similar issues are unknown it seems like custom rule is the only way for now.

So, at the moment I'm able to only force setting explicit type on the left side of yield expression:

const timePeriod = yield select(FilterSelectors.timePeriod);
          ^^^ error from custom rule - value has implicit any type                      

The next step is to extract the types of the left and right sides of such yield and it's possible with public TypeChecker#getTypeFromTypeNode.
Now when both types are available they could be checked for assignability with helpers under // TYPE CHECKING section in compiler/checker.ts in createTypechecker factory function (like checkTypeAssignableTo), but unfortunately they are isolated inside that factory.

Therefore I suggest exporting that helpers from compiler/checker.ts on the module-level (or under a namespace, or even as TypeChecker static fields), they will be very helpful for implementing such custom rules.

Activity

  1. mhegazy commented on Oct 31, 2017

    @mhegazy
    Contributor

    Duplicate of #9879

  2. raveclassic commented on Oct 31, 2017

    @raveclassic
    Author

    Mohamed Hegazy (@mhegazy) Thanks for the pointing! Closing

  3. cloudify commented on May 28, 2018

    @cloudify

    Kirill Agalakov (@raveclassic) and anybody else looking at type checking saga yield calls: I've create a very crude custom tslint rule here.

    The rules checks that the return type of the function passed to select and call matches the type of the variable on the left side of the yield and the types are matched using the result of typeToString.

    It's not perfect, but it works for my needs, hope it helps.

  4. raveclassic commented on May 28, 2018

    @raveclassic
    Author

    Federico Feroldi (@cloudify) Thanks! However we've dropped both redux and redux-saga and switched to rxjs completely.

  5. locked and limited conversation to collaborators on Jul 31, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already created

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions