-
-
Notifications
You must be signed in to change notification settings - Fork 46
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
Typescript support for moduleResolution node16 #96
Comments
Could you provide the use cases or concrete code slices? Is it only a linting warning about potential issues or are there any real failures? Here is the test case only for ts definition: https://github.com/kaelzhang/node-ignore/blob/master/test/ts/simple.ts |
Sure and it's a real typescript typing/intellisense failure, not just linting. I ran into this in my own project here: I think with typescript + node16 resolution, when you share a single types file with cjs and esm, it seems to assume cjs. In this code, I had to @ts-expect-error because If you need a repo environment, that project should work, just removed the @ts-expect-error and you should see the same bug. If that doesn't work for you, creating a narrowed reproduction repo wouldn't be difficult, it will just take a few days since the work week is starting. |
It is really weird that
|
@kaelzhang I think the only way to fix this is to add a real esm output: {
"name": "ignore",
"version": "5.3.0",
"main": "index.js",
"module": "index.mjs",
"types": "index.d.ts"
} |
I'm getting the error: import ignore from "ignore";
const ig = ignore(); Looking at the type definitions: /**
* Creates new ignore manager.
*/
declare function ignore(options?: Options): Ignore
declare namespace ignore {
export function isPathValid (pathname: string): boolean
}
export default ignore It is clear that the last definition of |
I managed to make it work like this: tsconfig.json {
"compilerOptions": {
"baseUrl": ".",
"typeRoots": ["./src/@types", "./node_modules/@types"], src/@types/ignore.d.ts type Pathname = string;
interface TestResult {
ignored: boolean;
unignored: boolean;
}
export interface Ignore {
/**
* Adds one or several rules to the current manager.
* @param {string[]} patterns
* @returns IgnoreBase
*/
add(patterns: string | Ignore | readonly (string | Ignore)[]): this;
/**
* Filters the given array of pathnames, and returns the filtered array.
* NOTICE that each path here should be a relative path to the root of your repository.
* @param paths the array of paths to be filtered.
* @returns The filtered array of paths
*/
filter(pathnames: readonly Pathname[]): Pathname[];
/**
* Creates a filter function which could filter
* an array of paths with Array.prototype.filter.
*/
createFilter(): (pathname: Pathname) => boolean;
/**
* Returns Boolean whether pathname should be ignored.
* @param {string} pathname a path to check
* @returns boolean
*/
ignores(pathname: Pathname): boolean;
/**
* Returns whether pathname should be ignored or unignored
* @param {string} pathname a path to check
* @returns TestResult
*/
test(pathname: Pathname): TestResult;
}
export interface Options {
ignorecase?: boolean;
// For compatibility
ignoreCase?: boolean;
allowRelativePaths?: boolean;
}
declare module "ignore" {
/**
* Creates new ignore manager.
*/
export function ignore(options?: Options): Ignore;
} Now I can use it as: import { ignore } from "ignore";
const ig = ignore(); |
I also face this issue when trying to upgrade my app to typescript compilation with moduleResolution node16
|
The above solution works "in principle" to remove the eslint type warning. However it should obviously export default as this matches the underlying code. import ignore from "ignore"; Via type Pathname = string;
interface TestResult {
ignored: boolean;
unignored: boolean;
}
declare module "ignore" {
export interface Ignore {
/**
* Adds one or several rules to the current manager.
* @param {string[]} patterns
* @returns IgnoreBase
*/
add(patterns: string | Ignore | readonly (string | Ignore)[]): this;
/**
* Filters the given array of pathnames, and returns the filtered array.
* NOTICE that each path here should be a relative path to the root of your repository.
* @param paths the array of paths to be filtered.
* @returns The filtered array of paths
*/
filter(pathnames: readonly Pathname[]): Pathname[];
/**
* Creates a filter function which could filter
* an array of paths with Array.prototype.filter.
*/
createFilter(): (pathname: Pathname) => boolean;
/**
* Returns Boolean whether pathname should be ignored.
* @param {string} pathname a path to check
* @returns boolean
*/
ignores(pathname: Pathname): boolean;
/**
* Returns whether pathname should be ignored or unignored
* @param {string} pathname a path to check
* @returns TestResult
*/
test(pathname: Pathname): TestResult;
}
export interface Options {
ignorecase?: boolean;
// For compatibility
ignoreCase?: boolean;
allowRelativePaths?: boolean;
}
/**
* Creates new ignore manager.
*/
export default function ignore(options?: Options): Ignore;
} I propose to change the |
The |
Do you plan on submitting a pull request @kristianmandrup ? |
Sure. Why not 😊 |
Made a PR #136 with this fix |
I see the PR has been reverted #136 What was the issue ?
Have you tried this approach @kristianmandrup @kaelzhang ? |
Don't waste your life writing Typescript, try Python instead. I have used countless programming languages in production environments, and TypeScript is the one I hate the most, not one of. Typescript really sucks. I really don't have time to waste on it. Can anyone help me solve this issue? |
As a typescript user when setting moduleResolution to Node16 or NodeNext, I currently get typescript failures from the ignore package.
Due to typescript-eslint@6 upgrading to only support Node16+, I'm unable to support both simultaneously.
For more information on possible fixes see:
https://arethetypeswrong.github.io/?p=ignore
The text was updated successfully, but these errors were encountered: