-
Notifications
You must be signed in to change notification settings - Fork 12.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Package dependencies and The inferred type of ... cannot be named without a reference to ... #29808
Comments
It'd be great to have a concrete way to repro the OOM exception |
@RyanCavanaugh we are bumping into this issue in an Aurelia app we are building. It has appeared after upgrade from TS 3.1.x (now on 3.4.5). For us the problem is exposed with I've been trying to put together a repro for you and have got something although it's not perfect (problem is only visible via VS Code and I havent been able to determine the difference in the CLI build). If you clone |
Oh and probably importantly considering this seems to be exposed via symlinks, I am on Windows 10 |
Same here on Windows 10 x64 Pro. |
@simonfox you found any workaround? |
@nthypes no sorry |
Getting same error here 😩 after upgrading to |
Sorry, guys, I never did create a minimal repro for this. But if you are getting assignability errors, it may have to do with classes with private properties, or unique symbols, which are nominally typed, and may not be assignable across different package versions. Even if they're structurally typed, if the interface or type alias is different between the two versions, they won't be assignable to each other (which makes sense, in this case) I still need to go ahead and make a repro for the assignability thing but I'm on holiday at the moment =x Not sure if I can repro the OOM anymore, though |
solved with Module resolution: {
"compilerOptions": {
"baseUrl": ".", // This must be specified if "paths" is.
"paths": {
"graphql-compose": ["node_modules/graphql-compose/"]
},
// ...
} |
This error has been plaguing me for ages. It appears to be caused by the static inferred type of an io-ts codec depending on a type in a transitive dependency. Explicitly importing those transitive types seems to help, but that results in a bunch of unused imports, which is undesireable. I've had some success fixing it by doing two things: (1): Installing ts-common as a top level dep that's the same version as all transitive dependencies on it. (2): Reinstalling to allow npm to "dedupe" the package. This makes sure imports to ts-common resolve at the top level rather than transitively. However, with using lerna, deduping doesn't appear to work. But to make things even more confusing, this error cropped up only in tron-payments, but not in stellar-payments. Even though they're using identical package versions and similar imports. Then I stumbled across microsoft/TypeScript#29808 which describes a very similar issue. I ended up trying this commentors solution microsoft/TypeScript#29808 (comment) and that appeared to fix the issue. This isn't a perfect solution, but it's the best I've found. Ideally typescript should always generate portable declaration files, or at least resolve to the top level module when installed.
Happens when we have conflicting versions of a package installed. A temporary solution would be to remove the package mentioned from peer dependencies of the plugin giving the error. Or install the exact version of common dependancy |
Same bug TS 3.7.2. The APP uses some REACT stuff imported indirectly (APP has no direct REACT dependency) via intermediary LIB. TypeScript complains some REACT interface passed indirectly through LIB cannot be named without a reference to Temporary solution: set P.S. Dependency structure
|
Well, this is similar, though not related to package versions. Instead it seems to happen when actually referenced packages are located outside of the project folder. Here's a repro for Typescript 3.7.5 / 3.8.0-dev.20200204 It works for npm and yarn, but fails with pnpm and yarnv2. Disable creation of declarations "fixes" it somewhat, as well as appending the type: |
Hello, I had the same issue! As a POC, I created a repository dedicated to this issue, to show how it is happening! Please check it and follow the instructions that are on README! |
I ran into the same issue after linking packages in a yarn workspace in my case, I was referencing changing the name so it doesn't refer to a global alias fixed my issue edit: error came back again, so not sure if the above was the actual fix 😓 |
I have the same issue on a pnpm workspace, first exported hook function whit react tsx format like below which is so fine without any errors : import { useQuery } from "@apollo/react-hooks";
import {
getCategoryUnits,
getCategoryUnitsVariables,
getCategoryUnits_getCategory,
GQL_GET_CATEGORY_UNITS
} from "@satek/resolvers";
import ApolloClient from "apollo-client";
import React from "react";
interface ParsingProps {
data: getCategoryUnits_getCategory;
}
interface ErrorProps {
errMsg: string;
}
interface Components {
error: React.FC<ErrorProps>;
loading: React.FC<{ type: "DotsHide" | "DotsShake" | "Circle" }>;
parsing: React.FC<ParsingProps>;
}
export function useCategoryCategoriesQuery<
C extends Components,
V extends getCategoryUnitsVariables
>(components: C, variables: V, client: ApolloClient<object>) {
let Response: React.ReactElement | null = null;
const Error = components.error;
const Loading = components.loading;
const Parsing = components.parsing;
const { loading, error, data } = useQuery<
getCategoryUnits,
getCategoryUnitsVariables
>(GQL_GET_CATEGORY_UNITS, {
variables,
client
});
if (loading) {
Response = <Loading type="DotsHide" />;
} else if (error) {
Response = <Error errMsg={error.message} />;
} else if (data) {
Response = <Parsing data={data.getCategory} />;
}
return { Response };
} and other hook function like below which just export data and throw this error import { useMutation } from "@apollo/react-hooks";
import {
createCategory,
createCategoryVariables,
getCategoriesVariables,
GQL_CREATE_CATEGORY,
GQL_GET_CATEGORIES
} from "@satek/resolvers";
import ApolloClient from "apollo-client";
export function useCreateCategoryMutate<V extends getCategoriesVariables>(
variables: V,
client: ApolloClient<object>
) {
const [createCategoryMutate, result] = useMutation<
createCategory,
createCategoryVariables
>(GQL_CREATE_CATEGORY, {
client,
update: (store, { data: createCategoryMutate }) => {
if (createCategoryMutate!.createCategory.organization!.id) {
variables.organizationId = createCategoryMutate!.createCategory.organization!.id;
}
const { getCategories }: any = store.readQuery({
query: GQL_GET_CATEGORIES,
variables
});
store.writeQuery({
query: GQL_GET_CATEGORIES,
variables,
data: {
getCategories: [
createCategoryMutate!.createCategory,
...getCategories
]
}
});
}
});
return {
createCategoryMutate,
result
};
} this error will be gone when I set last but not least, when I build the project typescript throw error for several files but create js file for all of them with declaration files. |
I had the same issue and i solved it by changing the name of some declaration file |
I solved it by move project position to a clean folder which has no parent
will get error:
but if
everything is OK. |
Yep, just like everyone else is hinting, this problem happens when a dependency that is linked into the project (f.e. with In this case, the dependency is not de-duped, and exists in two places: in the project's For some reason, VS Code (TypeScript?) is preferring the nested dependency, even if they have the same version number, and (for some reason) introducing this weird error. One way that I get around the problem is, instead of linking a project (which is a difficult thing not to do if you are relying on workspace tools like yarn/npm), to put that dependency's ref/hash in the dependent's package.json, so that I haven't observed if this issue happens with duplicate dependencies in non-linked projects (f.e. which could happen if the duplicate dependencies have incompatible versions and can not be de-duped). As a general way to reproduce, make sure your project has this structure in node_modules:
And that might generate the error. one workaroundWe can install the dependency from VCS's like git (note, if the dependency has build steps, this won't work unless that dependency stores build output in the code repository, or has a prepare script that tells NPM how to build the project): in {
"dependencies": {
"the-linked-dependency": "github-username/the-linked-dependency#REF"
}
} where Once that is in |
Same issue here. With Typescript 4.1.5. I wonder why ist this still open, since it's created on February 2019 :D |
There are workarounds for this, though none of which I have liked. In my case, importing the package whose type was used and is considered "private" gets around this. For example, if you had defined a type in package import "Y"; This will, however, not work if you use that package only as a dev dependency. A workaround would be to use You could import the type that causes the issue, such as import type { ExampleB } from "Y"; Again though, none of these are that pretty. I hope that a better solution can be proposed here because it makes more advanced types absolutely worthless or introduces ugly code with necessary comments pointing to this issue 😞 |
In our case we used yarn workspaces and there were two packages with same dependency. I'm not able to replicate exact steps here but eventually yarn was installing version that's below ^1.2.3 and this error helped to catch the issue. |
Got also a similiar error at a The actual issue was that i've had After adding it to the other depending packages, e.g. in Example of the additions in e.g. {
"devDependencies": {
"@types/react": "^16.8.6 || ^17.0.0"
},
"dependencies": {
},
"peerDependencies": {
"@types/react": "^16.8.6 || ^17.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
},
"publishConfig": {
"access": "public"
}
} |
I also have a problem like this inside a monorepo, and just reinstalling the deps with Don't really understand what's going on but hope that helps someone. |
I got a similar error in a yarn workspace package project that: Solved by moving |
I restarted the damn IDE and it disappeared :/ |
Try with: {
"compilerOptions": {
"preserveSymlinks": true
}
} Credits to @imcuttle |
I also set |
Hey! Looks like someone invited me to this issue. |
@givebk-bot !donate @antoniopresto $ 5 thanks for your solution! old but gold. ❤️ |
🎁 Hey @antoniopresto, you have just received U$ 5 from @nthypes!
@nthypes thanks for your support! ❤️
@antoniopresto, you can check your balance at https://givebk.io.
═══
(powered by https://givebk.io)
ID: 3e747d04-7499-4ff8-a74b-0c162cf4b997
|
It does work for link errors using pnpm. thank you very much. |
The e.g. |
Closing this for clarity since I'd prefer new issues to misconfiguration questions and banal observations of issue age. To recap, you get this error when the declaration emitter can't synthesize a legal-looking import path for a file it needs create an explicit import for in order to name a type that was indirectly referenced. It's another way of saying "You can't get there from here". The declaration emitter is not 100% perfect and it may be possible for a human to write a path that actually is legal in these situations. If you get this error, generally the best thing to do is to write an import in the erroring file to the module that the declaration emitter is trying to reference. If you can't do this because there's no legal way to do it in your program, then, well, there's your problem -- you're asking tsc to do something impossible. If you can write an import path that works, generally speaking this is considered a TS bug, though in some cases the module paths are so edge-case that we're not willing to generate them by default. You can log a (minimal) bug outlining the file path that should have been generated but wasn't, and we can take a look. Happy coding! |
TypeScript Version: 3.3.0-dev.20190119
Search Terms: inferred type, cannot be named, reference, package, dependency
This isn't really a traditional bug report. Mostly a PSA of some sort.
Code
The dependencies of interest are,
Before updating,
1.0.0
of package "A" (older version)2.51.1
of package "B" (older version)1.0.0
of package "A" has2.51.1
of package "B" (older version)After updating package "A",
1.0.1
of package "A" (newer patch version, bug-fix, no.d.ts
changes)2.51.1
of package "B" (older version)1.0.1
of package "A" has2.51.2
of package "B" (newer patch version, bug-fix, no.d.ts
changes)There's a package version mismatch here.
My project has
2.51.1
of "B" but the package I updated has2.51.2
of "B".In the newer version of "A" and "B", no
.d.ts
files were added/removed/modified.Expected
Before updating, the project compiled.
So, the rationale is that after updating a patch version, the project should still compile.
Actual
After updating, the project stopped compiling.
tsc
crashed; out-of-memory exception.VS Code gave me the error,
Workaround
The workaround is to just update "B" to
2.51.2
in my project. After doing so, everything compiles again.It seems like package versions matter to TypeScript when it comes to transitive dependencies. Even if it's a patch version and no
.d.ts
files are added/removed/modified.Related Issues: #29221
The text was updated successfully, but these errors were encountered: