Class 'Tabs' incorrectly implements interface 'NavigationContainer'. Types of property 'parent' are incompatible. Type 'NavControllerBase' is not assignable to type 'NavController'. Types of property 'popTo' are incompatible

I am pretty sure this reply encapsulates the reasons why I’m so frustrated with the Ionic framework.

  1. Hardcoding dependencies that introduce dependency hell when you’re trying to interop with other libraries that prefer more up-to-date stuff.
  2. A community leader who responds to inquiries with snark.

I mean, the actual error definitely looks like a legit typo / version bug, rather than some kind of complicated behavior change in typescript versions (tightening up implicit generic return params in 2.4, for example).

I guess one thing that would be worth writing is an ionic doctor sort of command that looks at your package.json and flags potentially-incompatible installations. Maybe I’ll poke at it.

Would you prefer Ionic simply have blanket unversioned dependencies, so that everybody is left on their own to figure out what versions are expected to work? That seems like an even worse situation.

Is this unreasonable advice?

I’m not a leader of anything, and that “inquiry” sounded to me like it was made by somebody who didn’t bother to read the thread. If they had, one would think they would (a) have mentioned their TypeScript version and explained why it needed to be >2.4 and (b) have indicated that they had indeed read issue #12716 and were wondering if it had been merged into a release yet.

Yes, I get frustrated when people don’t make the effort to avail themselves of preexisting relevant information, especially when it is only a handful of comments above in this very thread.

I think, given the sheer number of replies you’ve posted here on this forum that you qualify as a community leader whether or not that title is an official one. I also think that there’s general strategies that exist for cultivating a welcoming community, and being less snarky is probably a good idea, even when the question seems dumb. Punishing people for asking the wrong questions is a pretty good gateway to getting a community where people are afraid to ask questions at all, FWIW.

Of course, it doesn’t help that I did read through the whole thread and was already in a bad mood about the bug not having a patch to fix it yet, so by the time I got to your post, I was not in the frame of mind to really let it go with a laugh.

I think it’s also probably the case that you should avoid using the phrase “off the reservation”. I am not a Native American, but it definitely feels like one of those things that should probably be dropped from the vernacular.

All that said, the frustration around versions is not that version locks exist, but rather that ionic carries with it a pretty strong lock-in that doesn’t have much movement. For example, I can make a couple of very minor changes in the ionic source to fix the declaration problem from #12716 and hey presto, things build in typescript 2.5 - releasing a fix for this shouldn’t take long. The broader example would be how ionic mandates an older version of angular, with not a ton of movement in getting the newer stuff patched in during the past few months. I know there’s a lot of work being done to decouple the ionic ui framework from angular, so I’m looking forward to that.

As an aside: why does ionic mandate a typescript version in the first place? This is a legitimate question and not snark, I’m actually curious about it. I would have expected the various ionic packages to have distribution .js and .d.ts files, and for the typescript compiler to only touch the code I write. It seems weird that typescript should even be looking at a raw .ts file in an ionic library during build phases.

What I meant by that comment is that I don’t want to insinuate that I speak for the Ionic team in any capacity.

I would agree with you. However, I value “constructive” and “productive” more than I do “welcoming”, and to that end I want to encourage people to ask good questions. Shame and snark directed against unwillingness to make that effort is part of that. There are way too many “write my app for me” posts here written by people who make accounts solely for the purpose of making them. I consider being “welcoming” towards that to be counterproductive towards improving “constructive”.

why does ionic mandate a typescript version in the first place?

That’s a good question, and not one I have much insight on. The only thing that comes to mind is that perhaps having both development and production builds is easier that way.

Ran into this issue today with a colleague. My advice would be to lock down the TypeScript dependency version in your package.json file. You can globally run something higher, but different versions of Ionic rely on different TypeScript versions. One thing I’m particularly missing having to run TypeScript 2.3.4 is the ability to have String Enums :wink:

I also recommend doing the same with any Ionic/Angular packages – it’s just a safe programming practice to lock down your dependency versions so there’s no risk of things breaking because a build server or another teammate runs npm install and gets a newer version than you are developing with.

Thanks, after changing the version to an older one should I do a

npm i

Once again?

This worked for me:
Add this to tsconfig.json temporarily

 "compilerOptions": {
     ....
    "skipLibCheck": true,
    "noStrictGenericChecks": true,
    .....

Ref: https://github.com/ionic-team/ionic/issues/12233

2 Likes

facing same issue and my version is 4.12