ts-node: [Typescript 5.0] TypeError: value.replace is not a function
Search Terms
- Typescript 5.0
- tsconfig extends array
Expected Behavior
No error.
Actual Behavior
$ npm exec -- ts-node --esm --swc ./path/to/reproduce.mts
/path/to/node_modules/ts-node/dist/util.js:62
return value.replace(backslashRegExp, directorySeparator);
^
TypeError: value.replace is not a function
at normalizeSlashes (/path/to/node_modules/ts-node/dist/util.js:62:18)
at Object.getExtendsConfigPath (/path/to/node_modules/ts-node/dist/ts-internals.js:24:54)
at readConfig (/path/to/node_modules/ts-node/dist/configuration.js:127:64)
at findAndReadConfig (/path/to/node_modules/ts-node/dist/configuration.js:50:84)
at phase3 (/path/to/node_modules/ts-node/dist/bin.js:254:67)
at bootstrap (/path/to/node_modules/ts-node/dist/bin.js:47:30)
at Object.<anonymous> (/path/to/node_modules/ts-node/dist/child/child-entrypoint.js:23:21)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
Node.js v18.15.0
Debug
function normalizeSlashes(value) {console.warn({value})
return value.replace(backslashRegExp, directorySeparator);
}
errrlog
{
value: [ '@tsconfig/strictest/tsconfig', '@tsconfig/node18/tsconfig' ]
}
Steps to reproduce the problem
Minimal reproduction
Specifications
- ts-node version: latest
- node version: v18.15.0
- TypeScript version: latest
- tsconfig.json, if you’re using one:
"extends": [
"@tsconfig/strictest/tsconfig",
"@tsconfig/node18/tsconfig"
],
- package.json:
{}
- Operating system and version:
- If Windows, are you using WSL or WSL2?:
Additional
https://www.npmjs.com/package/@tsconfig/node18-strictest-esm
This package has been deprecated Author message: TypeScript 5.0 supports combining TSConfigs using array syntax in extends
https://github.com/tsconfig/bases#what-about-combined-configs
Because of previous limitations in the config extension system of TypeScript, this repo used to provide combined configs from a few common bases (like Node + ESM, Node + Strictest and so on).
This issue is now moot since TypeScript v5.0.0, which provides the ability to extend from multiple configs at once. For instance, if you want to start from a Node 18 + Strictest base config, you can install both @tsconfig/node18 and @tsconfig/strictest packages and extend those configs like so:
// tsconfig.json
{
"extends": ["@tsconfig/strictest/tsconfig", "@tsconfig/node18/tsconfig"]
}
About this issue
- Original URL
- State: open
- Created a year ago
- Reactions: 79
- Comments: 45
Commits related to this issue
- chore: 使用未發佈的 ts-node 支援 TS 5.0 https://github.com/TypeStrong/ts-node/issues/2000#issuecomment-1677926066 — committed to NTUT-NPC/emily by rileychh 10 months ago
- chore: 使用未發佈的 ts-node 支援 TS 5.0 https://github.com/TypeStrong/ts-node/issues/2000#issuecomment-1677926066 — committed to NTUT-NPC/emily by rileychh 10 months ago
- chore: yarn 4, @swc/jest (#89) - upgrade to yarn 4 - replace `ts-node` / `ts-jest` with `@swc/jest` to workaround lack of support for extends with multiple files https://github.com/TypeStrong/ts-n... — committed to mnahkies/openapi-code-generator by mnahkies 8 months ago
- chore(update): adjust for `ts-node` fix of relative bases issue, better handling of `extends` array bug See: TypeStrong/ts-node#2076 See: TypeStrong/ts-node#2000 — committed to 10mi2/tms-projen-projects by giseburt 7 months ago
- test(client-property-dds): correct lodash use and cleanup test script spec Note: test:mocha-ts* are not usable per no ts-node release to address https://github.com/TypeStrong/ts-node/issues/2000 wher... — committed to microsoft/FluidFramework by jason-ha 4 months ago
- tools(client-property-dds): remove mocha-ts scripts test:mocha-ts* are not usable per several issues with ts-node (10.9.2 or earlier): - https://github.com/TypeStrong/ts-node/issues/2000 no tsconfig e... — committed to microsoft/FluidFramework by jason-ha 4 months ago
- build(property-dds): convert to fluid-tsc (#19773) - fix explicit paths for full ESM - address lodash imports - various corrections from more strict tsc options with tests including testing LZ4... — committed to microsoft/FluidFramework by DLehenbauer 4 months ago
In my project , change
tsconfig.json
extends: ['...']
toextends: '...'
can fix it.Can we please get a 10.9.2 with just this fix? Is there any ETA? What is the benefit of waiting?
I would consider porting to an alternative like SWC if you require TypeScript v5 support. Maintainers of open-source repositories don’t owe their users answers to questions like this.
Workaround May have to install direct from git until the next release, see https://github.com/TypeStrong/ts-node/pull/1958
From https://github.com/TypeStrong/ts-node/discussions/1977#discussion-5014427
Workaround
@ahollenbach What’s the reason why the maintainers haven’t issued a new release for more than one year?
@gspetrou the solution is to migrate to another library (like @swc/register).
This is a critical issue, in a critical library (in ts ecosystem) and there is still no solution (the issue was created on April 24)
There is nothing we can do to fix this issue, other than wait for the maintainers.
Does someone have a workaround about this issue ? It still blocking me while running end to end and unit tests 😞
And i’ve got the same issue when i try to get the next dev release
My workarround : leave only one element on the extends (
"extends": "./node_modules/gts/tsconfig-google.json"
) and move others in the main tsconfig fileIt would be awesome if ts-node could release a fix for this! A package that I use (Cypress) uses ts-node internally, and the old @tsconfigs in the projects that I work on are incompatible with TypeScript 5 because they have some options that are no longer supported. So until ts-node is fixed and Cypress uses that new version, the projects that I work on will have to stick with TypeScript 4 and the old @tsconfigs.
@chenxxzhe, the reason for the thumbs down is that the whole point of this issue is that folks are hoping for support for
extends: ['...']
.As a definitive solution, you can migrate to @swc/register.
Also, It can be easily used by jest, mocha, etc…
Or just fork it and publish it yourself since it’s open source and contains changes other people than just the maintainers committed to benefit everyone
https://www.npmjs.com/package/tsx was the best choices for me! I had a lot of pain with ts-node, and either
vite-node
which was better BTWJust an FYI so you don’t need to duplicate the version, you can just do
reference
Agreed. It seems absurd that a primary package in the TS ecosystem hasn’t released an update (that’s already merged) to support the current version of the TS language. Is this project no longer being actively maintained?
Are you saying
swc-node
errors when theextends
field oftsconfig.json
is an array? I don’t think that is true.By the way, congrats on having this issue fixed for over a year now in main without releasing it in npm 👏🏼👏🏼👏🏼
Thanks. This worked for me. They really need to fix this issue in this package, though.
@StevenDouillet did you try the workaround by @loynoir https://github.com/TypeStrong/ts-node/issues/2000#issuecomment-1519339593
It outputs a
tsconfig.tsnode.json
from yourtsconfig.json
thatts-node
can understands.If it helps I’ve used it in this repo
unlike-ltd/cloudflare-pages-action
tsconfig.json
tsconfig.tsnode.json
I have 2 cli scripts that use it.
Then for any other script I do
@top-kat thank you - however nodemon uses ts-node. I don’t know how to configure it otherwise. All I want is to auto compile and restart my TS app on file change
No, I misquoted, see edit.
I switched to swc guys, its pretty simple:
Besides, wanted to share, just saw
node
has a--watch
flag now. so with one less dependency, my npm dev command is even more beautiful:With ts-node@11.0.0-beta.1 and TS >5 I’m still getting the same errors with extends. My only way to fix it is to downgrade to TS 4.9.
FYI - the beta version of ts-node 11 is published: https://www.npmjs.com/package/ts-node/v/11.0.0-beta.1 so installing via git is no longer necessary.
It can be installed using
npm install ts-node@11.0.0-beta.1
if using npm.FYI - this fix has been made already (confirmed locally): https://github.com/TypeStrong/ts-node/pull/1958. However, the maintainers have not issued a new release in more than a year and are recommending installing via git branch in order to consume this change: https://github.com/TypeStrong/ts-node/discussions/1977
In what way is this a solution? It looks like this just binds SWC to be used when importing files with
require
. This is unrelated to the owner of ts-node refusing to release bug fixes for no reasonSame here. It is breaking everything.
Note that if you have a
ts-node
config section in yourtsconfig
file, that it won’t be ported into yourtsc --showConfig
output. You’ll need to manually copy that over after the hackedtsconfig
file is created.