Git Product home page Git Product logo

Comments (4)

rzane avatar rzane commented on June 9, 2024 1

I really wanted to be able to enforce types a little better in my project, and based on your work, this is what I came up with: https://gist.github.com/rzane/51c1a462532acfa01296eb75f6830d10.

By using tuples, and declaring functions on my interfaces, I was able to solve this specific problem mentioned in this issue.

The interfaces that I define are a little different from the ones in the README. For example:

interface AuthActions {
  login(user: User): Promise<void>;
}

interface AuthMutations {
  login(user: User): void;
  logout(): void;
}

interface AuthGetters {
  currentUser(): User | null;
}

Another cool thing offered in the gist are the helpers for components. It means that I also get type safety in components.

class MyComponent extends Vue {
  @Getter currentUser!: UseGetter<'currentUser'>;
  @Action login!: UseAction<'login'>;
}

I'd be happy to send a PR based on my gist, if you are interested. I would be a breaking change for this library though.

from vuex-type-helper.

ktsn avatar ktsn commented on June 9, 2024

Since this lib was made before conditional types, it is needed to pass undefined explicitly for type safety. I guess we can omit that by defining the lib types with conditional types.

from vuex-type-helper.

hirakuro avatar hirakuro commented on June 9, 2024

Hello.
I faced similar case, and avoided the problem with code like below.

export interface AuthMutations {
  unsetCurrentUser: void;
}
mutations.unsetCurrentUser(state, undefined) // passes
mutations.unsetCurrentUser(state, null) // passes
mutations.unsetCurrentUser(state) // passes too
mutations.unsetCurrentUser(state, 0) // fails but it is expected

(Here is dummy code from yours because I can not publish our real code, sorry)

If you can accept mutations.unsetCurrentUser(state, undefined) // passes, how about this work-around?

from vuex-type-helper.

hirakuro avatar hirakuro commented on June 9, 2024

Sorry!
In a method of action with my work-around, I faced same problem too like below.

(snip)
  someAction({commit}){
    commit("unsetCurrentUser", undefined) // passses
    commit("unsetCurrentUser") // fails...
  }

from vuex-type-helper.

Related Issues (5)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.