Common Errors
Discover the solution to your TypeScript problems with our comprehensive list of common TypeScript errors. Each entry includes the faulty code and its fixed version, ensuring you can quickly resolve any issue and get back to coding.
If you encounter errors that are not present in the list, feel free to submit them here: https://github.com/bennycode/typescript-errors/
If youβre interested in more TypeScript troubleshooting and best practices, check out our free TypeScript tutorials on YouTube. πΊ You can also follow TypeScript TV on Twitter to stay up to date. π€
All errors are categorized by the TypeScript team into the following ranges:
- 1xxx for syntactic errors
- 2xxx for semantic errors
- 4xxx for declaration emit errors
- 5xxx for compiler options errors
- 6xxx for command line errors
- 7xxx for type errors
- 1. TS1002
- 2. TS1005
- 3. TS1006
- 4. TS1015
- 5. TS1016
- 6. TS1029
- 7. TS1036
- 8. TS1038
- 9. TS1039
- 10. TS1046
- 11. TS1055
- 12. TS1056
- 13. TS1064
- 14. TS1066
- 15. TS1068
- 16. TS1070
- 17. TS1095
- 18. TS1103
- 19. TS1109
- 20. TS1117
- 21. TS1127
- 22. TS1128
- 23. TS1149
- 24. TS1155
- 25. TS1160
- 26. TS1183
- 27. TS1192
- 28. TS1196
- 29. TS1202
- 30. TS1208
- 31. TS1218
- 32. TS1219
- 33. TS1225
- 34. TS1228
- 35. TS1232
- 36. TS1243
- 37. TS1244
- 38. TS1254
- 39. TS1259
- 40. TS1308
- 41. TS1337
- 42. TS1341
- 43. TS1355
- 44. TS1357
- 45. TS1361
- 46. TS1363
- 47. TS1368
- 48. TS1371
- 49. TS1375
- 50. TS1378
- 51. TS1385
- 52. TS1389
- 53. TS1431
- 54. TS1432
- 55. TS1434
- 56. TS1471
- 57. TS2300
- 58. TS2304
- 59. TS2305
- 60. TS2306
- 61. TS2307
- 62. TS2314
- 63. TS2315
- 64. TS2322
- 65. TS2335
- 66. TS2339
- 67. TS2344
- 68. TS2345
- 69. TS2348
- 70. TS2349
- 71. TS2351
- 72. TS2352
- 73. TS2355
- 74. TS2361
- 75. TS2362
- 76. TS2364
- 77. TS2365
- 78. TS2366
- 79. TS2367
- 80. TS2368
- 81. TS2369
- 82. TS2370
- 83. TS2371
- 84. TS2372
- 85. TS2377
- 86. TS2378
- 87. TS2390
- 88. TS2391
- 89. TS2393
- 90. TS2394
- 91. TS2395
- 92. TS2403
- 93. TS2411
- 94. TS2420
- 95. TS2428
- 96. TS2430
- 97. TS2440
- 98. TS2445
- 99. TS2448
- 100. TS2451
- 101. TS2454
- 102. TS2456
- 103. TS2459
- 104. TS2475
- 105. TS2476
- 106. TS2488
- 107. TS2497
- 108. TS2498
- 109. TS2503
- 110. TS2507
- 111. TS2511
- 112. TS2512
- 113. TS2515
- 114. TS2528
- 115. TS2531
- 116. TS2532
- 117. TS2533
- 118. TS2536
- 119. TS2538
- 120. TS2539
- 121. TS2540
- 122. TS2550
- 123. TS2551
- 124. TS2552
- 125. TS2554
- 126. TS2556
- 127. TS2558
- 128. TS2559
- 129. TS2564
- 130. TS2567
- 131. TS2571
- 132. TS2574
- 133. TS2577
- 134. TS2580
- 135. TS2582
- 136. TS2583
- 137. TS2584
- 138. TS2588
- 139. TS2595
- 140. TS2611
- 141. TS2613
- 142. TS2614
- 143. TS2616
- 144. TS2617
- 145. TS2632
- 146. TS2636
- 147. TS2637
- 148. TS2652
- 149. TS2654
- 150. TS2656
- 151. TS2661
- 152. TS2663
- 153. TS2664
- 154. TS2665
- 155. TS2668
- 156. TS2669
- 157. TS2677
- 158. TS2678
- 159. TS2680
- 160. TS2683
- 161. TS2684
- 162. TS2686
- 163. TS2687
- 164. TS2689
- 165. TS2691
- 166. TS2693
- 167. TS2694
- 168. TS2695
- 169. TS2706
- 170. TS2709
- 171. TS2713
- 172. TS2715
- 173. TS2717
- 174. TS2720
- 175. TS2722
- 176. TS2724
- 177. TS2730
- 178. TS2732
- 179. TS2739
- 180. TS2740
- 181. TS2741
- 182. TS2742
- 183. TS2749
- 184. TS2769
- 185. TS2774
- 186. TS2779
- 187. TS2786
- 188. TS2790
- 189. TS2792
- 190. TS2794
- 191. TS2802
- 192. TS2813
- 193. TS2814
- 194. TS4020
- 195. TS4025
- 196. TS4060
- 197. TS4063
- 198. TS4075
- 199. TS4081
- 200. TS4104
- 201. TS4112
- 202. TS4113
- 203. TS4114
- 204. TS5023
- 205. TS5024
- 206. TS5025
- 207. TS5042
- 208. TS5054
- 209. TS5055
- 210. TS5058
- 211. TS5069
- 212. TS5070
- 213. TS5083
- 214. TS5087
- 215. TS5101
- 216. TS6053
- 217. TS6059
- 218. TS6133
- 219. TS6138
- 220. TS6192
- 221. TS6196
- 222. TS6198
- 223. TS6504
- 224. TS7006
- 225. TS7008
- 226. TS7009
- 227. TS7010
- 228. TS7016
- 229. TS7017
- 230. TS7022
- 231. TS7023
- 232. TS7026
- 233. TS7027
- 234. TS7030
- 235. TS7031
- 236. TS7034
- 237. TS7041
- 238. TS7044
- 239. TS7053
- 240. TS8020
- 241. TS17000
- 242. TS17004
- 243. TS17009
- 244. TS18004
- 245. TS18016
- 246. TS18046
- 247. TS18048
- 248. TS80005
TS1002
error TS1002: Unterminated string literal.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to close the string literal with an ending '
:
1 |
|
If you want to support multiline text, then you would have to use string concatenation:
1 |
|
Another solution would be using a template literal:
1 |
|
TS1005
error TS1005: β=β expected.
Broken Code β
1 |
|
Fixed Code βοΈ
You need to assign your type declaration using the =
character:
1 |
|
Alternatively you can declare an interface:
1 |
|
error TS1005: β;β expected.
Broken Code β
1 |
|
Fixed Code βοΈ
When using an arrow function expression, you can implicitly return values by wrapping the object literal in parentheses:
1 |
|
TS1006
error TS1006: A file cannot have a reference to itself.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot reference a file to itself (causes recursive loop). To fix the problem you have to update the reference path to point to another declaration file:
1 |
|
TS1015
error TS1015: Parameter cannot have question mark and initializer.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1016
error TS1016: A required parameter cannot follow an optional parameter.
Broken Code β
1 |
|
Fixed Code βοΈ
The easiest way to fix the error is to make age
optional as well:
1 |
|
Alternatively, you can flip the order of middleName
and age
. Be aware that this breaks the contract (signature) of the function and is considered a βbreaking changeβ:
1 |
|
You could also make middleName
non-optional:
1 |
|
Yet another solution would be to assign a default value to middleName
so it wonβt be optional by default. This allows age
to be optional then:
1 |
|
TS1029
error TS1029: βpublicβ modifier must precede βabstractβ modifier.
Broken Code β
1 |
|
Fixed Code βοΈ
They keywords public
, private
, and protected
define the access to a class member. Access modifiers have to be defined first in TypeScript.
Solution 1:
1 |
|
Solution 2:
The visibility is public
by default, so you donβt have to explicitly declare it:
1 |
|
Video Tutorial
TS1036
error TS1036: Statements are not allowed in ambient contexts.
Broken Code β
1 |
|
Fixed Code βοΈ
With declare global
an ambient context is created. TypeScript does not allow statements in such ambient context declaration which is why we have to change the statement into a declaration:
1 |
|
If you donβt want client
to be a function, you have to use the
var` keyword:
1 |
|
TS1038
error TS1038: A βdeclareβ modifier cannot be used in an already ambient context.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1039
error TS1039: Initializers are not allowed in ambient contexts.
Broken Code β
1 |
|
Fixed Code βοΈ
Within a declaration file (ambient context), you should define types instead of implementing code. Consequently, youβll need to replace the initialization with a type annotation:
1 |
|
TS1046
error TS1046: Top-level declarations in .d.ts files must start with either a βdeclareβ or βexportβ modifier.
Broken Code β
1 |
|
Fixed Code βοΈ
If you want to export a constant from a definition file (d.ts
), then you have to use the export
modifier:
1 |
|
TS1055
error TS1055: Type β
AxiosPromise
β is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1056
error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
Set the βtargetβ property in your βtsconfig.jsonβ file to βes5β or higher:
1 |
|
TS1064
error TS1064: The return type of an async function or method must be the global Promise type. Did you mean to write βPromise β?
Broken Code β
1 |
|
Fixed Code βοΈ
If your function is asynchronous, your return value must be wrapped with Promise<...>
:
1 |
|
TS1066
error TS1066: In ambient enum declarations member initializer must be constant expression.
Broken Code β
1 |
|
Fixed Code βοΈ
Try to replace your enum declaration with a type:
1 |
|
TS1068
error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
Broken Code β
1 |
|
Fixed Code βοΈ
Functions that are part of a class are being called βmethodβ. The method of a class is defined without the function
keyword:
1 |
|
TS1070
error TS1070: βprivateβ modifier cannot appear on a type member.
Broken Code β
1 |
|
Fixed Code βοΈ
Interfaces are structures that define the public contract. This prohibits you from using private
modifiers. Only public
and protected
can be used. To solve the problem, the private
keyword must be removed from the name
property of the Animal
interface:
1 |
|
Video Tutorial
TS1095
error TS1095: A βsetβ accessor cannot have a return type annotation.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to remove the return type from the βsetβ accessor:
1 |
|
TS1103
error TS1103: βfor awaitβ loops are only allowed within async functions and at the top levels of modules.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to mark your function with the async
keyword:
1 |
|
TS1109
error TS1109: Expression expected.
Broken Code β
1 |
|
Fixed Code βοΈ
Any snippet of code that evaluates to a value is an expression. Any snippet of code that performs an action is a statement. We need a statement to throw an error inside:
1 |
|
TS1117
error TS1117: An object literal cannot have multiple properties with the same name in strict mode.
Broken Code β
1 |
|
Fixed Code βοΈ
We can only have one value per property:
1 |
|
TS1127
error TS1127: Invalid character.
Broken Code β
1 |
|
Fixed Code βοΈ
Unlike in Python, inline comments cannot begin with a single hash sign (#
) in TypeScript. You must use 2 slashes:
1 |
|
TS1128
error TS1128: Declaration or statement expected.
Broken Code β
1 |
|
Fixed Code βοΈ
A declaration specifies the data and a statement specifies some action with that data:
1 |
|
TS1149
error TS1149: File name differs from already included file name only in casing.
Broken Code β
This error occurs when you import the same file in two different files using two different casing styles (ex. camelCase and UpperCamelCase):
File A:
1 |
|
File B:
1 |
|
Fixed Code βοΈ
The error can be fixed by using the same casing style:
File A:
1 |
|
File B:
1 |
|
Alternatively, you can set forceConsistentCasingInFileNames
to false
in your βtsconfig.jsonβ file:
1 |
|
TS1155
error TS1155: βconstβ declarations must be initialized.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Alternatively you can define a block-scoped local variable:
1 |
|
TS1160
error TS1160: Unterminated template literal.
Broken Code β
1 |
|
Fixed Code βοΈ
This error is similar to TS1002 but refers to the ending of a template literal. To fix it, we have to close the template literal with an ending `
:
1 |
|
TS1183
error TS1183: An implementation cannot be declared in ambient contexts.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot write a function implementation inside a declaration file (*.d.ts
). You can only declare its signature:
1 |
|
Alternatively, you can write your function implementation inside a source code file (*.ts
).
TS1192
error TS1192: Module β
json5
β has no default export.
Broken Code β
1 |
|
Fixed Code βοΈ
When you are importing a module with built-in TypeScript declarations and TypeScript tells you that this module does not have a default export, then you can solve this problem by adding βallowSyntheticDefaultImportsβ to your βtsconfig.jsonβ file and setting it to true
:
1 |
|
error TS1192: Module β
.../logdown
β has no default export.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
error TS1192: βexport *β does not re-export a default.
Broken Code β
1 |
|
You have to re-export a default (in this case coming from runWhenReady.ts
):
Fixed Code βοΈ
1 |
|
TS1196
error TS1196: Catch clause variable type annotation must be βanyβ or βunknownβ if specified.
Broken Code β
1 |
|
Fixed Code βοΈ
Errors in catch clauses can only be typed with any
or unknown
. If you need a more precise error typing, you can use a type guard as follows:
1 |
|
Video Tutorial
TS1202
error TS1202: Import assignment cannot be used when targeting ECMAScript modules. Consider using βimport * as ns from βmodββ, βimport {a} from βmodββ, βimport d from βmodββ, or another module format instead.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1208
error TS1208: βindex.tsβ cannot be compiled under ββisolatedModulesβ because it is considered a global script file. Add an import, export, or an empty βexport {}β statement to make it a module.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
To solve the issue you can turn off βisolatedModulesβ in your βtsconfig.jsonβ. If you want to keep going with isolated modules, then you have to add an import or export to your code:
1 |
|
TS1218
error TS1218: Export assignment is not supported when ββmoduleβ flag is βsystemβ.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1219
error TS1219: Experimental support for decorators is a feature that is subject to change in a future release. Set the βexperimentalDecoratorsβ option in your βtsconfigβ or βjsconfigβ to remove this warning.
Broken Code β
1 |
|
Fixed Code βοΈ
Simply set βexperimentalDecoratorsβ to true
in your βtsconfig.jsonβ file. As long as decorators are experimental you will also have to install the reflect-metadata package to shim the upcoming Metadata Reflection API for ECMAScript. For proper functionality the βemitDecoratorMetadataβ option should also be set to true
.
TS1225
error TS1225: Cannot find parameter β
error
β.
Broken Code β
1 |
|
Fixed Code βοΈ
A type predicate needs a parameter to validate:
1 |
|
TS1228
error TS1228: A type predicate is only allowed in return type position for functions and methods.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to separate the argument list from the return type definition by a :
:
1 |
|
TS1232
error TS1232: An import declaration can only be used at the top level of a namespace or module.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1243
error TS1243: βstaticβ modifier cannot be used with βabstractβ modifier.
Solution
Broken Code β
1 |
|
Your abstract class
cannot define an abstract static
function. You have to keep it static
:
Fixed Code βοΈ
1 |
|
error TS1243: βasyncβ modifier cannot be used with βabstractβ modifier.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1244
error TS1244: Abstract methods can only appear within an abstract class.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1254
error TS1254: A βconstβ initializer in an ambient context must be a string or numeric literal or literal enum reference.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1259
error TS1259: Module can only be default-imported using the βesModuleInteropβ flag
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
1 |
|
Note: You can enable the βesModuleInteropβ flag also via the CLI:
1 |
|
TS1308
error TS1308: βawaitβ expressions are only allowed within async functions and at the top levels of modules.ts.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot use an await
expression in an useEffect
hook, but you can use legacy Promise calls:
1 |
|
Alternatively, you can use an IIFE (Immediately-invoked Function Expression) in your useEffect
hook:
1 |
|
TS1337
error TS1337: An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Alternative:
1 |
|
error TS1337: An index signature parameter type cannot be a union type. Consider using a mapped object type instead.
Broken Code β
1 |
|
Fixed Code βοΈ
Solution with mapped object type:
1 |
|
Alternative:
1 |
|
TS1341
error TS1341: Class constructor may not be an accessor.
Broken Code β
1 |
|
Fixed Code βοΈ
You canβt name accessors as constructor
:
1 |
|
TS1355
error TS1355: A βconstβ assertions can only be applied to references to enum members, or string, number, boolean, array, or object literals.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot apply a const assertion to the result of a ternary operator. It is necessary to restrict the usage of const assertions to the individual literal expressions:
1 |
|
TS1357
error TS1357: An enum member name must be followed by a β
,
β, β=
β, or β}
β.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1361
error TS1361: β
Range
β cannot be used as a value because it was imported using βimport typeβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The type Range
is being used to declare the return type of static function Ranger.getFullRange
but later on it is also being used to create an instance using new Range
. When you want to use a type to construct instances (or do anything else beyond declaring types), then you have to use the import
statement instead of import type
:
1 |
|
TS1363
error TS1363: A type-only import can specify a default import or named bindings, but not both.
Broken Code β
1 |
|
Fixed Code βοΈ
With type-only imports and exports you cannot use a default import together with a named import in one single line of code. The TypeScript team chose this limitation to avoid ambiguity. You will have to use separate import statements:
1 |
|
TS1368
error TS1368: Class constructor may not be a generator.
Broken Code β
1 |
|
Fixed Code βοΈ
You canβt name generators as constructor
:
1 |
|
TS1371
error TS1371: This import is never used as a value and must use βimport typeβ because βimportsNotUsedAsValuesβ is set to βerrorβ.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
Solution 1:
When βimportsNotUsedAsValuesβ is set to βerrorβ in your βtsconfig.jsonβ, then you have to use the βimport typeβ syntax when you just want to refer to a type instead of using it as a value:
1 |
|
Solution 2:
Use the class also as a value and not just a type:
1 |
|
Solution 3:
You can also set βimportsNotUsedAsValuesβ to βpreserveβ which is not recommended.
TS1375
error TS1375: βawaitβ expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty βexport {}β to make this file a module.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1378
error TS1378: Top-level βawaitβ expressions are only allowed when the βmoduleβ option is set to βes2022β, βesnextβ, βsystemβ, or βnodenextβ, and the βtargetβ option is set to βes2017β or higher.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS1385
error TS1385: Function type notation must be parenthesized when used in a union type.
Broken Code β
1 |
|
Fixed Code βοΈ
When using a union type, you have to put additional function types in parentheses:
1 |
|
TS1389
error TS1389: βthisβ is not allowed as a variable declaration name.
Broken Code β
1 |
|
Fixed Code βοΈ
The name this
cannot be used to declare a variable because it is already a reserved keyword to refer to the current object in a method or constructor.
Thatβs why you have to choose a different name:
1 |
|
TS1431
error TS1431: βfor awaitβ loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty βexport {}β to make this file a module.
Broken Code β
1 |
|
Fixed Code βοΈ
Just add the imports for the fs
module and readline
module in order to turn your code into a module itself:
1 |
|
TS1432
error TS1432: Top-level βfor awaitβ loops are only allowed when the βmoduleβ option is set to βes2022β, βesnextβ, βsystemβ, βnode16β, or βnodenextβ, and the βtargetβ option is set to βes2017β or higher.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
The error is similar to TS1378 and needs an adjustment in the tsconfig.json
file:
1 |
|
TS1434
error TS1434: Unexpected keyword or identifier.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to remove the duplicate static
keyword:
1 |
|
TS1471
error TS1471: Module β
@headlessui/react
β cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported synchronously. Use dynamic import instead.
Broken Code β
1 |
|
Fixed Code βοΈ
Using a dynamic import:
1 |
|
TS2300
error TS2300: Duplicate identifier βnameβ.
Broken Code β
Objects donβt support multiple properties with the same name:
1 |
|
Fixed Code βοΈ
To fix the error we have to remove the duplicated property:
1 |
|
TS2304
error TS2304: Cannot find name βworldβ.
Broken Code β
1 |
|
Fixed Code βοΈ
It can happen that TypeScript does not know about your global objects because those may be injected from an unknown runtime environment or third-party JavaScript library. The easiest way to let TypeScript know about this is to declare the ambience (ambient context):
1 |
|
error TS2304: Cannot find name βPromiseβ
Broken Code β
1 |
|
Fixed Code βοΈ
Install es6-promise
type definitions with the typings tool.
1 |
|
Adding the following line to the beginning of every file using definitions from es6-promise
.
1 |
|
error TS2304: Cannot find name βPromiseβ
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
error TS2304: Cannot find name βFCβ.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2305
error TS2305: Module β
./sum
β has no exported member βmultiply
β.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
The file βsum.tsβ exports a function named βsumβ, so we have to fix the named import in our βmain.tsβ file:
1 |
|
TS2306
error TS2306: File β
add.ts
β is not a module.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
The error TS2306 signals that the file (add.ts
) can be found (otherwise it would throw error TS2307) but does not provide the necessary exports. We can solve this with a named export:
1 |
|
Alternatively we can use a default export:
1 |
|
Using a default export requires that we also adjust our import statement in main.ts
(otherwise we would end up with error TS2614):
1 |
|
Video Tutorial
TS2307
error TS2307: Cannot find module βeventsβ or its corresponding type declarations.
Broken Code β
You are importing from a core Node.js module (e.g. event
) without having Node.js type definitions installed:
1 |
|
Fixed Code βοΈ
Import Node.js type definitions first in order to use Node.js core modules:
1 |
|
More: Error TS2307: Cannot find module events
TS2314
error TS2314: Generic type β
Omit
β requires 2 type argument(s).
Broken Code β
1 |
|
Fixed Code βοΈ
When using the Omit
utility type, you have to list property overwrites with a pipe (|
):
1 |
|
error TS2314: Generic type β
ReadonlyArray
β requires 1 type argument(s).
Broken Code β
1 |
|
Fixed Code βοΈ
When using a generic (in this case ReadonlyArray<T>
), then you have to pass a type argument to it:
1 |
|
TS2315
error TS2315: Type β
CustomRequest
β is not generic.
Broken Code β
1 |
|
Fixed Code βοΈ
When supplying a type (recognizable by the use of the diamond operator <>
), then we have to make sure that our type actually supports generics to capture the type that we provide:
1 |
|
TS2322
error TS2322: Type βstringβ is not assignable to type βnumberβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The type of the returned value must match the return type specified in the function signature:
1 |
|
Video Tutorial
TS2335
error TS2335: βsuperβ can only be referenced in a derived class.
Broken Code β
1 |
|
Fixed Code βοΈ
Your derived class has to βextendβ the base class:
1 |
|
TS2339
error TS2339: Property β
width
β does not exist on type βShape
β.
Broken Code β
1 |
|
Fixed Code βοΈ
You can create discriminated unions by sharing a single field (e.g. kind
) in your type definitions and using a union type in connection with a switch-case statement that helps the TypeScript compiler to distinguish the different types:
1 |
|
error TS2339: Property β
pop
β does not exist on type βreadonly [1, 2, 3]
β.
Broken Code β
1 |
|
When using a const assertion on an array, then your array becomes readonly (immutable), so you cannot modify its elements using in-place operations such as pop
. You will have to make your array mutable:
1 |
|
TS2344
error TS2344: Type β
{ name: string; }
β does not satisfy the constraint β{ age: number; }
β. Property βage
β is missing in type β{ name: string; }
β but required in type β{ age: number; }
β.
Broken Code β
1 |
|
Fixed Code βοΈ
When passing a type argument, the required properties of the type variable (T
) must be matched:
1 |
|
As an alternative, type argument inference can be used:
1 |
|
TS2345
error TS2345: Argument of type β
number
β is not assignable to parameter of type βTimerHandler
β.
Broken Code β
1 |
|
Fixed Code βοΈ
There is a mismatch in the expected arguments of a function. The setTimeout
function expects the first argument to be a callback function and not the returned value (in this case a number
) of a function call:
1 |
|
Video Tutorial
TS2348
error TS2348: Value of type βtypeof BaseNβ is not callable. Did you mean to include βnewβ?
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2349
error TS2349: Cannot invoke an expression whose type lacks a call signature. Type βPromise
β has no compatible call signatures.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2351
error TS2351: This expression is not constructable. Type β
EMA
β has no construct signatures.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
1 |
|
TS2352
error TS2352: Conversion of type β
{ name: string; age: number; }
β to type βPerson
β may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to βunknown
β first.
Broken Code β
1 |
|
Fixed Code βοΈ
Make sure all properties of your object match the properties of your declared type:
1 |
|
Alternative but not recommended: Convert your object to unknown
first:
1 |
|
TS2355
error TS2355: A function whose declared type is neither βvoidβ nor βanyβ must return a value.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2361
error TS2361: The right-hand side of an βinβ expression must not be a primitive.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot use the in
keyword on primitive data types. Thatβs why we have to replace the primitive type unknown
with a non-primitive type like object
:
1 |
|
An alternative solution would be to use a type assertion on the right-hand side of the βinβ expression:
1 |
|
TS2362
error TS2362: The left-hand side of an arithmetic operation must be of type βanyβ, βnumberβ, βbigintβ or an enum type.
Broken Code β
1 |
|
Fixed Code βοΈ
When you want to merge two objects, you have a multitude of possibilities:
Spread Syntax
1 |
|
Object.assign
1 |
|
TS2364
error TS2364: The left-hand side of an assignment expression must be a variable or a property access.
Broken Code β
1 |
|
Fixed Code βοΈ
Using a variable on the left-hand side assignment:
1 |
|
TS2365
error TS2365: Operator β+β cannot be applied to types βnumberβ and βobjectβ.
Broken Code β
1 |
|
Fixed Code βοΈ
You can use the +
operator only with equivalent data types (strings + strings or numbers + numbers):
1 |
|
TS2366
error TS2366: Function lacks ending return statement and return type does not include βundefinedβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The switch-case statement isnβt handling all cases from every possible input. We can solve that by defining a default
case:
1 |
|
Another solution would be to implement the missing case for 3
:
1 |
|
Video Tutorial
TS2367
error TS2367: This condition will always return βfalseβ since the types β{ message: string; }[] | undefinedβ and βnumberβ have no overlap.
Broken Code β
1 |
|
Fixed Code βοΈ
An array cannot be 0
, so doing a check for equality with 0
makes no sense. What may be useful instead is checking the array length:
1 |
|
TS2368
error TS2368: Type parameter name cannot be βnumberβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The easiest way to fix the error is to make age
optional as well:
1 |
|
TS2369
error TS2369: A parameter property is only allowed in a constructor implementation.
Broken Code β
1 |
|
Fixed Code βοΈ
The constructor implementation is missing curly brackets which is why TypeScript does not recognize the constructor implementation and files error TS2369. To solve it you have to add the missing curly brackets:
1 |
|
TS2370
error TS2370: A rest parameter must be of an array type.
Broken Code β
1 |
|
Fixed Code βοΈ
A rest parameter allows a function to accept an indefinite number of parameters. To signal that it can be multiple values, we have to use an array
type for our rest parameter:
1 |
|
TS2371
error TS2371: A parameter initializer is only allowed in a function or constructor implementation.
Broken Code β
1 |
|
Fixed Code βοΈ
Remove parameter initializer from function overload:
1 |
|
TS2372
error TS2372: Parameter β
score
β cannot reference itself.
Broken Code β
1 |
|
Fixed Code βοΈ
If you want to use a default value for a parameter, then you have to set it to a fixed value instead of referencing the parameter to itself:
1 |
|
TS2377
error TS2377: Constructors for derived classes must contain a βsuperβ call.
Broken Code β
1 |
|
Fixed Code βοΈ
Every constructor
in a derived class has to call the super
method to invoke the constructor
of the base class. It has to be the very first call:
1 |
|
Video Tutorial
TS2378
error TS2378: A βgetβ accessor must return a value.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2390
error TS2390: Constructor implementation is missing.
Broken Code β
1 |
|
Fixed Code βοΈ
A constructor implementation must be put in curly brackets:
1 |
|
TS2391
error TS2391: Function implementation is missing or not immediately following the declaration.
Broken Code β
1 |
|
Fixed Code βοΈ
An abstract class is different from an interface. You have to use the abstract
modifier if you want to define a contract in an abstract class. If there is no abstract
modifier you will have to provide a implementation.
Solution 1:
To solve the problem, we can mark makeNoise
with the abstract
keyword. That will enforce derived classes to implement this method on their own:
1 |
|
Solution 2:
Another solution is to provide a base implementation for makeNoise
:
1 |
|
Video Tutorial
TS2393
error TS2393: Duplicate function implementation.
Broken Code β
1 |
|
Fixed Code βοΈ
This error may occur when you have multiple files within the same project that implement the same function with the same name. To resolve this issue, you need to configure TypeScript to recognize a file as a script rather than a module. This can be achieved by setting the βmoduleDetectionβ option to βforceβ instead of the default βautoβ:
1 |
|
TS2394
error TS2394: This overload signature is not compatible with its implementation signature.
Broken Code β
The implementation does not match all signatures:
1 |
|
Fixed Code βοΈ
To match the first function overload, we have to add code to our function body which can also return a number
:
1 |
|
Video Tutorial
TS2395
error TS2395: Individual declarations in merged declaration β
React
β must be all exported or all local.
Broken Code β
1 |
|
Fixed Code βοΈ
Make sure to export your additional declaration:
1 |
|
TS2403
error TS2403: TS2403: Subsequent variable declarations must have the same type. Variable β
window
β must be of type βWindow & typeof globalThis
β, but here has type βany
β.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2411
error TS2411: Property βageβ of type βnumberβ is not assignable to βstringβ index type βstringβ.
Broken Code β
1 |
|
Fixed Code βοΈ
We defined an interface where every key
has a value of type string
. This doesnβt work for age
which is why we have to extend the possible value types using a union type:
1 |
|
TS2420
error TS2420: Class βDogβ incorrectly implements interface βAnimalβ. Property βnameβ is private in type βDogβ but not in type βAnimalβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The Animal
interface defines a public name
member. The name
property in our Dog
class must therefore also be public:
1 |
|
Video Tutorial
TS2428
error TS2428: All declarations of β
Strategy
β must have identical type parameters.
Broken Code β
1 |
|
Fixed Code βοΈ
Solution: The generic abstract class Strategy
has a generic type parameter list in angle brackets (diamond notation). This generic type parameter list must also be added to the interface definition of Strategy
.
1 |
|
TS2430
error TS2430: Interface β
StockExchange
β incorrectly extends interface βExchange
β.
Broken Code β
1 |
|
Fixed Code β
The address
in Exchange
is a mandatory property but in StockExchange
it is declared as being optional which creates an incompatibility in the type. To fix the error, the property address
has either to become optional or mandatory in both declarations:
1 |
|
TS2440
error TS2440: Import declaration conflicts with local declaration of β
React
β.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot redeclare a module that you are importing, but you can outsource your additional typings to a declaration file in order to apply declaration merging:
1 |
|
TS2445
error TS2445: Property βmakeNoiseβ is protected and only accessible within class βDogβ and its subclasses.
Broken Code β
1 |
|
Fixed Code βοΈ
The visibility of the makeNoise
method is protected. We have to make it public if we want to call it directly from an instance of Dog
:
1 |
|
Video Tutorial
TS2448
error TS2448: Block-scoped variable βaddβ used before its declaration.
Broken Code β
Function expressions cannot be hoisted (used before they are declared):
1 |
|
Fixed Code βοΈ
Turn your function expression into a function declaration (which can be hoisted):
1 |
|
TS2451
error TS2451: Cannot redeclare block-scoped variable β
window
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Depending on the configuration of βlibβ in your βtsconfig.jsonβ file, there might be global variables that are present (like window
when using the βdomβ library provided by TypeScript). In this case you cannot redeclare the global variable and have to choose another name:
1 |
|
TS2454
error TS2454: Variable βmyFavoriteNumberβ is used before being assigned.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
or
1 |
|
TS2456
error TS2456: Type alias β
MyValue
β circularly references itself.
Broken Code β
1 |
|
Fixed Code βοΈ
When defining a recursive type, you have to use the object syntax:
1 |
|
TS2459
error TS2459: Module β
./myFunction
β declares βmyFunction
β locally, but it is not exported.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
When you want to import your function in another file, you have to make sure that it is exported using the export
keyword:
1 |
|
1 |
|
TS2475
error TS2475: βconstβ enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.
Broken Code β
1 |
|
Fixed Code βοΈ
Defining a const enum
prevents TypeScript from generating JavaScript code for this enum. With const enum
TypeScript will just assume that the JavaScript equivalent of this code is already present.
If you want that TypeScript creates JS code for your enum definition, then you have to remove the const
keyword:
1 |
|
TS2476
error TS2476: A const enum member can only be accessed using a string literal.
Broken Code β
1 |
|
Fixed Code βοΈ
Constant enumerations can only be accessed using key names:
1 |
|
If you want to access enums by indices, you must remove the const
keyword and values from your enum
:
1 |
|
β οΈ Be aware that this may become unsafe as you may unintentionally access indices that are not defined.
TS2488
error TS2488: Type β
{ [month: number]: string; }
β must have a β[Symbol.iterator]()
β method that returns an iterator.
Broken Code β
1 |
|
Fixed Code βοΈ
The simplest way to loop over an object is to create an iterable object by using Object.entries
.
Another method is to add a property called [Symbol.iterator]
to your object. The value of this property has to return an iterator. Here you can learn how to create an iterator.
1 |
|
TS2497
error TS2497: Module β
logdown
β resolves to a non-module entity and cannot be imported using this construct.
Broken Code β
Export: logdown.d.ts
1 |
|
Import: app.ts
1 |
|
Broken Code β #2
Export
1 |
|
Import
1 |
|
Note: TypeScript compiler option βallowSyntheticDefaultImportsβ must be set to true
.
Import
1 |
|
TS2498
error TS2498: Module
'node_modules/@types/ms/index'
usesexport =
and cannot be used withexport *
Broken Code β
index.ts
1 |
|
Fixed Code βοΈ
If a third-party module uses a default export (indicated by the export =
syntax), you must use the default
keyword to re-export this module:
1 |
|
TS2503
error TS2503: Cannot find namespace β
React
β.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to add an import statement when reusing a different namespace. Also make sure to install type declarations (i.e. @types/react
) if needed.
1 |
|
error TS2503: Cannot find name βprocessβ. Do you need to install type definitions for node? Try
npm i --save-dev @types/node
.
Solution
Run yarn add --dev @types/node
in your npm project.
TS2507
error TS2507: Type β
typeof EventEmitter
β is not a constructor function type.
Error happened when importing the exported class in another project.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2511
error TS2511: Cannot create an instance of an abstract class.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Read more: Passing a class constructor as parameter to a function.
TS2512
error TS2512: Overload signatures must all be abstract or non-abstract.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2515
error TS2515: Non-abstract class βDogβ does not implement inherited abstract member βmakeNoiseβ from class βAnimalβ.
Broken Code β
1 |
|
Fixed Code βοΈ
If we derive a class from an abstract class, then we have to provide an implementation for all its abstract
members:
1 |
|
Video Tutorial
TS2528
error TS2528: A module cannot have multiple default exports.
Broken Code β
1 |
|
Fixed Code βοΈ
Make sure to only have one default export:
1 |
|
TS2531
error TS2531: Object is possibly βnullβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The error originates from the fact that address
can be null
. To fix the problem, we can check if address
is null
by using optional chaining:
1 |
|
TS2532
error TS2532: Object is possibly βundefinedβ.
Broken Code β
1 |
|
Fixed Code βοΈ
TypeScript warns us that person
can be undefined
(because of the ?
). There are multiple ways to fix the problem. We can do an existence check using an if
-condition:
1 |
|
Alternatively, we can use optional chaining:
1 |
|
Optional chaining is less preferable in this case as it will log undefined
if the person
is undefined
. Using the if
-condition from the solution above, nothing will be logged to the console in case the person
is undefined
.
TS2533
error TS2533: Object is possibly βnullβ or βundefinedβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The error originates from the fact that address
can be undefined
(because of the ?
) or null
. To fix the problem, we can check if address
is defined by using optional chaining:
1 |
|
TS2536
error TS2536: Type
string
cannot be used to index typeConfig
Broken Code β
1 |
|
Fixed Code βοΈ
Because the type of property
is a string
and Config
expects a ConfigKey
, we need to ensure that our property
is of type ConfigKey
.
We can simply annotate the ConfigKey
type to property
, but we also have to make sure that ConfigKey
extends the string
type as the set method of a Proxy only accepts string | symbol
:
1 |
|
TS2538
error TS2538: Type βPersonβ cannot be used as an index type.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot use an interface as an index type, but you can use all keys of the interface using the keyof
type operator:
1 |
|
TS2539
error TS2539: Cannot assign to
defaultName
because it is not a variable.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
Using the let keyword might lead to the assumption of exporting a variable, but in reality, every export becomes a constant. As weβre aware, constants cannot be reassigned.
To work around this, we can use a little trick with how some types are handled. If we put our defaultName
(initially a primitive string
type) inside an object (which is a complex type), we can change the value inside the object as it is passed by reference:
1 |
|
1 |
|
TS2540
error TS2540: Cannot assign to β
name
β because it is a read-only property.
Broken Code β
1 |
|
Fixed Code βοΈ
The user
object has been initialized with a const assertion, indicating to the compiler that the object is immutable. If you wish to reintroduce mutability, you have to remove the const assertion:
1 |
|
TS2550
error TS2550: Property β
setPrototypeOf
β does not exist on type βObjectConstructor
β. Do you need to change your target library? Try changing the βlibβ compiler option to βes2015β or later.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
ES5, also known as ECMAScript 2009, doesnβt include Object.setPrototypeOf
which is why you have to upgrade to ES6 (also known as ES2015):
1 |
|
TS2551
error TS2551: Property β
title
β does not exist on type βVideo
β. Did you mean βtitles
β?
Broken Code β
1 |
|
Fixed Code βοΈ
There is a typo in our code which TypeScriptβs compiler has caught for us. We have to rename the titles
property:
1 |
|
TS2552
error TS2552: Cannot find name βreadonlyArrayβ. Did you mean βReadonlyArrayβ?
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2554
error TS2554: Expected 2 arguments, but got 1.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Video Tutorial
TS2556
error TS2556: A spread argument must either have a tuple type or be passed to a rest parameter.
Broken Code β
1 |
|
Fixed Code βοΈ
When calling a function using the spread syntax (...
), we have to ensure that the called function uses a rest parameter:
1 |
|
TS2558
error TS2558: Expected 2 type arguments, but got 1.
Broken Code β
1 |
|
Fixed Code βοΈ
The combine
function defines 2 type variables (X
& Y
), so you have to pass it 2 type arguments:
1 |
|
TS2559
error TS2559: Type β
{ city: string; }
β has no properties in common with type βUser
β.
Broken Code β
1 |
|
Fixed Code βοΈ
The problem occurs with weak types (in this case User
). All properties of a weak type are optional but when your input doesnβt match any of the properties, you will get to see error TS2559. To fix it you have to match at least one of the optional properties:
1 |
|
TS2564
error TS2564: Property βnameβ has no initializer and is not definitely assigned in the constructor.
This error can occur with TypeScript 2.7 in βstrictβ mode. TypeScript 2.7 introduced a new flag called --strictPropertyInitialization
, which tells the compiler to check that each instance property of a class gets initialized in the constructor body, or by a property initializer. See Strict Class Initialization.
Broken Code β
1 |
|
Fixed Code βοΈ
We have to initialize the name
member either at its definition or within the constructor
.
Solution 1:
1 |
|
Solution 2:
1 |
|
Solution 3:
1 |
|
Video Tutorial
TS2567
error TS2567: Enum declarations can only merge with namespace or other enum declarations.
lib.dom.d.ts(18299, 6)
: βResponseTypeβ was also declared here.
Broken Code β
1 |
|
Fixed Code βοΈ
In the broken code shown above, a type ResponseType
is already declared as part of the βdomβ typings. Enums can be merged with other enums but since the other declaration of ResponseType
is a type
, we cannot merge the existing declaration with our custom one. Thatβs why we have to remove βdomβ from the βlibβ entries in our βtsconfig.jsonβ file or use a different name for our enum
:
1 |
|
TS2571
error TS2571: Object is of type βunknownβ.
Broken Code β
If you use third-party libraries then it can happen that TypeScript cannot infer all return types. In such a case a return type can be unknown
which makes it impossible to access its properties from TypeScript. In the following example such case is constructed by assigning unknown
to an exemplary constant:
1 |
|
Fixed Code βοΈ
To solve the problem of accessing properties from an unknown object, we have to define the type of the object which we want to access:
1 |
|
Broken Code β
1 |
|
Fixed Code βοΈ
If your variable is of type unknown
, then you can use a type guard to narrow the type of your variable. If you want to be sure that you have an object at hand, you can use the typeof
type guard:
1 |
|
Alternative
You may also get the error βObject is of type βunknownββ when catching errors. In this case you have to type the error in your catch clause.
TS2574
error TS2574: A rest element type must be an array type.
Broken Code β
1 |
|
Fixed Code βοΈ
Simply turn ...number
into ...number[]
:
1 |
|
TS2577
error TS2577: Return type annotation circularly references itself.
Broken Code β
1 |
|
Fixed Code βοΈ
You can remove the circular reference by removing the explicit return type (OurReply
) from the signature of your function:
1 |
|
TS2580
error TS2580: Cannot find name βrequireβ. Do you need to install type definitions for node? Try
npm i --save-dev @types/node
.
Broken Code β
1 |
|
Fixed Code βοΈ
Install typings for Node.js:
1 |
|
Update code to modern import syntax:
1 |
|
TS2582
error TS2582: Cannot find name βtestβ. Do you need to install type definitions for a test runner? Try
npm i --save-dev @types/jest
ornpm i --save-dev @types/mocha
.
Broken Code β
1 |
|
Fixed Code βοΈ
The error above is very specific to your testing framework and when using Jest it can be easily solved by installing definition files for Jest (npm i --save-dev @types/jest
).
When you are using Playwright, then you would have to make sure that you properly import Playwrightβs definition for test
:
1 |
|
TS2583
error TS2583: Cannot find name βBigIntβ. Do you need to change your target library? Try changing the βlibβ compiler option to βes2020β or later.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
Arbitrary-precision integers (BigInt) were introduced in 11th edition of the ECMAScript Language Specification (ES11 / ES2020), so you have to add this information to the βlibβ property of your TypeScript configuration to make use of this API:
1 |
|
Alternatively, you can make all additional APIs from ES2020 available to your code:
1 |
|
TS2584
error TS2584: Cannot find name βconsoleβ. Do you need to change your target library? Try changing the βlibβ compiler option to include βdomβ.
Broken Code β
TypeScript code:
1 |
|
TypeScript compiler configuration (tsconfig.json
):
1 |
|
Fixed Code βοΈ
You have to add the following to your βtsconfig.jsonβ file:
1 |
|
When you are working on an application which never runs in a browser but only in Node.js environments, then you could add @types/node
to your devDependencies
instead of adding "dom"
to your "lib"
section.
TS2588
error TS2588: Cannot assign to βnameβ because it is a constant.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot reassign values to constants which is why you have to declare a variable using the let
keyword:
1 |
|
TS2595
error TS2595: β
React
β can only be imported by using a default import.
Broken Code β
1 |
|
Fixed Code βοΈ
A default import cannot be put in curly braces:
1 |
|
TS2611
error TS2611: β
name
β is defined as a property in class βPerson
β, but is overridden here in βMyPerson
β as an accessor.
Broken Code β
1 |
|
Getters and setters are property accessors, so you have to make sure that you donβt mix property definitions with property accessor definitions. Using the accessor
keyword, you can turn a property into a property accessor:
1 |
|
TS2613
error TS2613: Module β
add
β has no default export. Did you mean to use βimport { add } from "add"
β instead?
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
To fix the bug we have to convert our named export into a default export:
1 |
|
TS2614
TS2614: Module
'./add.js'
has no exported memberadd
. Did you mean to useimport add from "./add.js"
instead?
Broken Code β
add.ts
1 |
|
main.ts
1 |
|
Fixed Code βοΈ
There are multiple ways to fix this. The simplest would be turning your import statement into a default import:
1 |
|
An alternative solution would be using a named export:
1 |
|
You could actually use a named export and a default export in the same file:
1 |
|
TS2616
error TS2616: βReactβ can only be imported by using βimport React = require(βreactβ)β or a default import.
Broken Code β
1 |
|
Fixed Code βοΈ
Use default import for React:
1 |
|
TS2617
error TS2617:
path
can only be imported by usingimport path = require("node:path")
or by turning on theesModuleInterop
flag and using a default import.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2632
error TS2632: Cannot assign to
path
because it is an import.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2636
error TS2636: Type β
Func<super-T>
β is not assignable to type βFunc<sub-T>
β as implied by variance annotation. Type βsuper-T
β is not assignable to type βsub-T
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Variance annotations on type variables must be consistent with their position. If a type variable is at output (read) position, it should be annotated with out
:
1 |
|
Alternatively, you can annotate it with both in
and out
(i.e. as invariant):
1 |
|
TS2637
error TS2637: Variance annotations are only supported in type aliases for object, function, constructor, and mapped types.
Broken Code β
1 |
|
Fixed Code βοΈ
Variance annotations only make sense if variance is considered while resolving the type alias. Since tuples and arrays are always type-checked covariantly, they do nothing in this case and thus raise the error.
To resolve the error, simply remove the variance annotation.
1 |
|
TS2652
error TS2652: Merged declaration β
MyPerson
β cannot include a default export declaration. Consider adding a separate βexport default MyPerson
β declaration instead.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot use the same name to declare a constant and a function. If your intention is to export your constant, then do the following:
1 |
|
TS2654
error TS2654: Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition.
Broken Code β
1 |
|
Fix
- Remove
/// <reference path="..." />
in.d.ts
files
Video Tutorial
TS2656
error TS2656: Exported external package typings file β
../proteus.d.ts
β is not a module. Please contact the package author to update the package definition.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2661
error TS2661: Cannot export β
getSdk
β. Only local declarations can be exported from a module.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
If you want to re-export getSdk
in another file, you have to export it first from its origin and then import it in the file where you want to re-export it:
1 |
|
1 |
|
TS2663
error TS2663: Cannot find name β
firstName
β. Did you mean the instance member βthis.firstName
β?
Broken Code β
1 |
|
Fixed Code βοΈ
If you want to use a getter, you need to back it up with a private property:
1 |
|
Starting from TypeScript 4.9, you can also use an auto-accessor field:
1 |
|
TS2664
error TS2664: Invalid module name in augmentation, module β
gas-local
β cannot be found.
Broken Code β
1 |
|
Fixed Code βοΈ
The problem occurs when you want to write a module augmentation for a package that isnβt found in your βnode_modulesβ directory. Make sure to install the module:
1 |
|
TS2665
error TS2665: Invalid module name in augmentation. Module β
gas-local
β resolves to an untyped module at β../node_modules/gas-local/index.js
β, which cannot be augmented.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to move the shorthand ambient module declaration from a β.tsβ file into a β.d.tsβ file:
1 |
|
1 |
|
TS2668
error TS2668: βexportβ modifier cannot be applied to ambient modules and module augmentations since they are always visible.
Info
Ambient modules
To describe the shape of libraries not written in TypeScript, we need to declare the API that the library exposes. We call declarations that donβt define an implementation βambientβ. Typically, these are defined in .d.ts
files. If youβre familiar with C/C++, you can think of these as .h
files.
Source: https://www.typescriptlang.org/docs/handbook/modules.html
Module Augmentation
With module augmentation, users have the ability to extend existing modules such that consumers can specify if they want to import the whole module or just a subset.
Source: https://blogs.msdn.microsoft.com/typescript/2016/02/22/announcing-typescript-1-8-2/
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Usage
1 |
|
TS2669
error TS2669: Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.
Broken Code β
1 |
|
You have to turn your code into a module by adding an import
or export
statement to your code. The easiest way to solve the problem is exporting an empty object:
Fixed Code βοΈ
1 |
|
TS2677
error TS2677: A type predicateβs type must be assignable to its parameterβs type. Type β
number
β is not assignable to type βstring
β.
Broken Code β
1 |
|
Fixed Code βοΈ
The input
is declared to be of type string
which is why the type predicate cannot turn it into a number
because these two declarations are mutually exclusive. Thatβs why we have to declare an input type of any
:
1 |
|
TS2678
error TS2678: Type β
StreamStatus
β is not comparable to type βnumber
β.
Broken Code β
1 |
|
Fixed Code βοΈ
The StreamResponse
declares a βstatusβ property of type number
but the switch-case statement checks against StreamStatus
, so we have to adjust the typing for βstatusβ of StreamResponse
:
1 |
|
TS2680
error TS2680: A βthisβ parameter must be the first parameter.
Broken Code β
1 |
|
Fixed Code βοΈ
TypeScript requires that a this
parameter always comes first in the list of parameters:
1 |
|
TS2683
error TS2683: βthisβ implicitly has type βanyβ because it does not have a type annotation.
Broken Code β
1 |
|
Fixed Code βοΈ
This bug is also a consequence of TS2680. To fix the bug we have to define the context of our function. It can be done by defining this
as the first parameter in our argument list and giving it a type annotation:
1 |
|
TS2684
error TS2684: The β
this
β context of type βvoid
β is not assignable to methodβs βthis
β of type βPerson
β.
Broken Code β
1 |
|
Fixed Code βοΈ
When calling a function that defines a this
parameter, then we have to set the this
context with apply
, bind
or call
.
Using apply
:
1 |
|
Using bind
:
1 |
|
Using call
:
1 |
|
Note: The TS2684 error may also occur when attempting to call static
functions of a class
with a private
constructor.
TS2686
error TS2686: βkoβ refers to a UMD global, but the current file is a module. Consider adding an import instead.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
error TS2686: βsinonβ refers to a UMD global, but the current file is a module. Consider adding an import instead.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
error TS2686: βReactβ refers to a UMD global, but the current file is a module. Consider adding an import instead.
Broken Code β
1 |
|
Fixed Code βοΈ
Use default import for React:
1 |
|
TS2687
error TS2687: All declarations of βstatusβ must have identical modifiers.
lib.dom.d.ts(11620, 14)
: βstatus
β was also declared here.
Broken Code β
1 |
|
Fixed Code βοΈ
In the error above, a Response
is declared which should be merged (using declaration merging) with the Response
interface of the βdomβ library which is set in βlibβ within the βtsconfig.jsonβ file. When merging with an existing declaration, the property types of the first declaration must be matched because you can only add additional properties when using declaration merging. The same rules applies to modifiers. Because βstatusβ has a readonly modifier in the existing Response
interface, we must declare the same in our own interface extension:
1 |
|
TS2689
error TS2689: Cannot extend an interface βAnimalβ. Did you mean βimplementsβ?
Broken Code β
1 |
|
Fixed Code βοΈ
The TypeScript compiler tells us already the solution: When implementing an interface, we have to use implements
. If we inherit from classes, we use extends
.
1 |
|
TS2691
error TS2691: An import path cannot end with a β.d.tsβ extension. Consider importing β./indexβ instead.
Broken Code β
You cannot directly import code from declaration files:
1 |
|
Fixed Code βοΈ
You have to import functions from the source code file (e.g. index.ts
):
1 |
|
TS2693
error TS2693: β
Candlestick
β only refers to a type, but is being used as a value here.
Broken Code β
main.ts
1 |
|
Candlestick.ts
1 |
|
Fixed Code βοΈ
main.ts
1 |
|
Candlestick.ts
1 |
|
TS2694
error TS2694: Namespace β
React
β has no exported member βNonExistent
β.
Broken Code β
1 |
|
Fixed Code βοΈ
When trying to import a type that is missing in an external namespace, then you have to add the missing typings yourself:
1 |
|
TS2695
error TS2695: Left side of comma operator is unused and has no side effects.
Broken Code β
1 |
|
Fixed Code βοΈ
You just cannot leave out a callback parameter if you donβt want to use it. Mark it with an underscore (_
) instead:
1 |
|
TS2706
error TS2706: Required type parameters may not follow optional type parameters.
Broken Code β
1 |
|
Fixed Code βοΈ
The generic type Key
is defined with a default value of string
which makes this type parameter not optional. However, the Value
type parameter is optional and optional parameters are not allowed to follow required parameters.
To solve the situation, we have can switch the position of the two parameters which would impact how we use the code:
1 |
|
Alternatively, we can also set a default type for Value
:
1 |
|
TS2709
error TS2709: Cannot use namespace β
globalThis
β as a type.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot use a namespace as a type, but you can get the type assigned with that namespace by using the typeof
operator:
1 |
|
TS2713
error TS2713: Cannot access β
CheckSuite.status
β because βCheckSuite
β is a type, but not a namespace. Did you mean to retrieve the type of the property βstatus
β in βCheckSuite
β with βCheckSuite["status"]
β?
Broken Code β
1 |
|
Fixed Code βοΈ
The utility type Pick
comes in handy when you want to select and extract specific properties from one type and apply them to another type:
1 |
|
TS2715
error TS2715: Abstract property βnameβ in class βAnimalβ cannot be accessed in the constructor.
Broken Code β
1 |
|
Fixed Code βοΈ
The name
member of the abstract Animal
class is abstract
, so we have to define it ourselves in the derived class Dog
. Because name
has no access modifier, it is public
by default which means that our Dog
class has to implement it with a public
visibility:
1 |
|
TS2717
error TS2717: Subsequent property declarations must have the same type. Property β
verbose
β must be of type βboolean
β, but here has type βstring
β.
Broken Code β
1 |
|
Fixed Code βοΈ
When declaring a property (in this case verbose
) twice, then the second declaration must follow the typings of the first declaration:
1 |
|
Usually the error TS2717 shows up when you have multiple versions of typings (i.e. @types/react
) for the same interfaces in your codebase. If you run into these kind of problems, you can inspect your typing resolutions using yarn why
(i.e. yarn why @types/react
) or npm explain
(i.e. npm explain @types/react
) to find out where you have conflicting typings.
Video Tutorial
TS2720
error TS2720: Class β
Dog
β incorrectly implements class βAnimal
β. Did you mean to extend βAnimal
β and inherit its members as a subclass? Property βmakeNoise
β is protected but type βDog
β is not a class derived from βAnimal
β.
Broken Code β
1 |
|
Fixed Code βοΈ
The implements
keyword is reserved to implement interfaces. If you want to work with class inheritance, you have to use extends
:
1 |
|
Video Tutorial
TS2722
error TS2722: Cannot invoke an object which is possibly β
undefined
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Method invocation only works if the method is defined. The onClick
method of the event
object in the example above is optional, which means it can be undefined
. Thatβs why we have to make an existence check before calling / invoking it:
1 |
|
As of TypeScript 3.7 you can also use the optional chaining (?.
) operator to call a method on an object if it exists:
1 |
|
A third possibility is to use reference validation:
1 |
|
TS2724
error TS2724: β
./index
β has no exported member named βHeaderOptions
β. Did you mean βHeaderOption
β?
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
TypeScript noticed a typing error in the name of the imported interface. The code will work if we correct the typo:
1 |
|
TS2730
error TS2730: An arrow function cannot have a βthisβ parameter.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to turn the arrow function expression into to a function declaration:
1 |
|
TS2732
error TS2732: Cannot find module β../../package.jsonβ. Consider using ββresolveJsonModuleβ to import module with β.jsonβ extension.
Broken Code β
1 |
|
Fixed Code βοΈ
To fix the issue and allow importing JSON files, you have to set βresolveJsonModuleβ to true
in your βtsconfig.jsonβ file.
TS2739
error TS2739: Type β
{}
β is missing the following properties from type βPerson
β:age
,name
Broken Code β
1 |
|
Fixed Code βοΈ
The object doesnβt have any properties, so it cannot be assigned to the type of Person
. We have to add the missing properties to fix this error:
1 |
|
Video Tutorial
error TS2739: Type βstring[]β is missing the following properties from type βPromise β: then, catch, [Symbol.toStringTag]
Broken Code β
1 |
|
When your function specifies to return a Promise, you have to ensure that your return value is also wrapped in a Promise
:
1 |
|
Alternatively, you can make use of the async
keyword, which will automatically wrap your return value into a Promise
:
1 |
|
TS2740
error TS2740: Type β
TextLine
β is missing the following properties from type βPosition
β: line, character, isBefore, isBeforeOrEqual, and 6 more.
Broken Code β
1 |
|
Fixed Code βοΈ
The parameter startLine
is requiring a value of type Position
but the default value returns a value of type TextLine
, so this has to be fixed to return the expected type:
1 |
|
TS2741
error TS2741: Property βnameβ is missing in type β{}β but required in type βAnimalβ.
Broken Code β
1 |
|
Fixed Code βοΈ
Interfaces can be used with classes or plain objects. If we want our object (i.e. laika
) to fulfill the contract of Animal
, we have to assign all required properties to it:
1 |
|
Video Tutorial
TS2742
error TS2742: The inferred type of β
ProductDeleteDocument
β cannot be named without a reference to βgraphql-tag/node_modules/graphql/language/ast
β. This is likely not portable. A type annotation is necessary.
Broken Code β
1 |
|
Fixed Code βοΈ
TypeScript asks for a type annotation to explicitly resolve the inferred type, so letβs add a type annotation:
1 |
|
In a monorepository the error TS2742 can show up when you are using a package that has not set a βmainβ property in its βpackage.jsonβ file. Sometimes it also happens that there is a βtypesβ property which does not point to the correct typings. Make sure both paths are present and relative:
1 |
|
You can run into this error when a code generator, such as graphql-code-generator
, misses to render an important statement (see here). This can happen when the generator relies on implicit typings (type inference) and it can be fixed by instructing your code generator to render the missing import statement. Depending on your code generator this could be done through a config file:
1 |
|
TS2749
error TS2749: β
paramNames
β refers to a value, but is being used as a type here. Did you mean βtypeof paramNames
β?
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS2769
error TS2769: No overload matches this call.
Broken Code β
1 |
|
Fixed Code βοΈ
There are only two function overloads for sum
. The first overload expects a
and b
to be of type number
. The second overload expects a
and b
to be of type string
but there is no overload that specifies a
to be a string
while b
is a number
. We have to add a third overload to allow such function calls:
1 |
|
An even easier solution would be to remove all function overloads as the function body allows us to use number
or string
through the union type of number | string
:
1 |
|
TS2774
error TS2774: This condition will always return true since this function is always defined. Did you mean to call it instead?
Broken Code β
1 |
|
Fixed Code βοΈ
Both interfaces (MyPerson
& MyDog
) declare a function named age
, so that if
-condition to check for its existence is unnecessary:
1 |
|
TS2779
error TS2779: The left-hand side of an assignment expression may not be an optional property access.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot assign a value to a property which might be undefined
. As Map.get() may return undefined
, you have to add an existence check:
1 |
|
TS2786
error TS2786: β
Component
β cannot be used as a JSX component.
Broken Code β
1 |
|
Fixed Code βοΈ
Usually the problem derives from a mismatch in @types/react
. When you have libraries that are dependent on a specific version of @types/react
(i.e. v17.0.47) and you have other libraries working with another major version of @types/react
(i.e. v18.0.14), then this can cause compatibility issues when using React.ReactNode
or JSX.Element
. You have to streamline your dependencies on @types/react
, so that these follow the same major version.
You can find all libraries depending on @types/react
in your project by executing npm explain @types/react
(when a package-lock.json
file is present) or yarn why @types/react
(when a yarn.lock
file is present).
TS2790
error TS2790: The operand of a βdeleteβ operator must be optional.
Broken Code β
1 |
|
Fixed Code βοΈ
When using the delete
operator to remove a property from an object, the property must be defined as optional in TypeScript:
1 |
|
TS2792
error TS2792: Cannot find module β
@playwright/test
β. Did you mean to set the βmoduleResolution
β option to βnode
β, or to add aliases to the βpaths
β option?
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
To fix the problem you have to use "moduleResolution": "node"
in your TS config:
1 |
|
TS2794
error TS2794: Expected 1 arguments, but got 0. Did you forget to include β
void
β in your type argument to βPromise
β?
Broken Code β
1 |
|
Fixed Code βοΈ
When a Promise resolves with nothing, you need to define that as a type argument to the generic Promise
:
1 |
|
TS2802
error TS2802: Type β
Set<string>
β can only be iterated through when using the ββdownlevelIterationβ flag or with a ββtargetβ of βes2015β or higher.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
In order to resolve the issue, you need to use a higher target environment that is more recent than ES5, such as ES6 for example:
1 |
|
Alternative:
TypeScript will downlevel your code based on your defined βtargetβ to support older JavaScript runtimes that lack built-in iterables. You can enable the downlevelIteration option to ensure compatibility with both legacy and modern platforms. This option generates a helper function that checks if the modern iteration is possible. If it is not supported, the helper function falls back to a legacy iteration, such as index-based iteration.
1 |
|
TS2813
error TS2813: Class declaration cannot implement overload list for βMyClassβ.
Broken Code β
1 |
|
Function declarations get hoisted, so you cannot give your class
the name of your function. Renaming your class solves the issue:
Fixed Code βοΈ
1 |
|
TS2814
error TS2814: Function with bodies can only merge with classes that are ambient.
Solution
Broken Code β
1 |
|
Your function
cannot be named after your class
, so you will have to rename your function:
Fixed Code βοΈ
1 |
|
Alternatively you can declare an ambient class which gets implemented by your function:
1 |
|
TS4020
error TS4020: βextendsβ clause of exported class β
StrategyPOJO
β has or is using private name βModel
β.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS4025
error TS4025: Exported variable β
App
β has or is using private name βFC
β.
Broken Code β
1 |
|
Fixed Code βοΈ
When using an external type (like FC
) you also have to make sure that it is imported:
1 |
|
TS4060
error TS4060: Return type of exported function has or is using private name βJSXβ.
Broken Code β
1 |
|
Fixed Code βοΈ
The global JSX namespace is declared in @types/react
. You have to install the @types/react
package to make use of it:
1 |
|
TS4063
error TS4063: Parameter β
config
β of constructor from exported class has or is using private name βDoubleMovingAverageConfig
β.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS4075
error TS4075: Parameter βeventβ of method from exported interface has or is using private name βStrategyβ.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS4081
error TS4081: Exported type alias β
MyReturnType
β has or is using private name βgetSdk
β.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
The getSdk
is identified to be private because it is not exported. If we export the getSdk
function, we wonβt have any more problems:
1 |
|
1 |
|
TS4104
error TS4104: The type β
readonly [1, 2, 3]
β is βreadonlyβ and cannot be assigned to the mutable type β[1, 2, 3]
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Using a const assertion makes your array immutable, so you have to use the readonly
modifier for its type:
1 |
|
Alternative:
1 |
|
Alternative #2:
1 |
|
TS4112
error TS4112: This member cannot have an βoverrideβ modifier because its containing class does not extend another class.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS4113
error TS4113: This member cannot have an β
override
β modifier because it is not declared in the base class βMyBaseClass
β.
Broken Code β
1 |
|
Fixed Code βοΈ
You can only override functions in our derived class when those exist in our base class. We can solve the error by overwriting an existing function:
1 |
|
Depending on our use case, we can also remove the override
modifier:
1 |
|
TS4114
error TS4114: This member must have an β
override
β modifier because it overrides a member in the base class βMyBaseClass
β.
Broken Code β
1 |
|
Fixed Code βοΈ
The error pops up when βnoImplicitOverrideβ is set to true
in your βtsconfig.jsonβ file, and you donβt use the override
modifier when overwriting a function from your base class. You can fix this by setting βnoImplicitOverrideβ to false
(not recommended) or using the override
modifier (preferred solution):
1 |
|
TS5023
error TS5023: Unknown compiler option β
-c
β.
Broken Code β
1 |
|
Fixed Code βοΈ
If you want to point the TypeScript compiler to a different configuration, you have to use the --project
flag (see all tsc CLI options):
1 |
|
TS5024
error TS5024: Compiler option βlibβ requires a value of type string.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to define a valid set of high level libraries (such as βes6β) that are available in your runtime:
1 |
|
TS5025
error TS5025: Unknown compiler option ββno-emitβ. Did you mean βnoEmitβ?
Broken Code β
1 |
|
Fixed Code βοΈ
Use camel case writing:
1 |
|
TS5042
error TS5042: Option βprojectβ cannot be mixed with source files on a command line.
Broken Code β
1 |
|
Fixed Code βοΈ
If youβre using the -p
/ --project
option, itβs not possible to directly pass a source file as an argument to the TypeScript compiler. If you want to specify the files to be compiled while using the project option from the command line interface (CLI), you need to add the desired files to the include
section of your TypeScript project configuration:
1 |
|
TS5054
error TS5054: A βtsconfig.jsonβ file is already defined at: β
C:/dev/bennycode/ts-node-starter/tsconfig.json
β.
Broken Code β
1 |
|
Fixed Code βοΈ
You cannot initialize a new TypeScript compiler configuration when there is one already present. You have to delete the existing file first.
TS5055
error TS5055: Cannot write file because it would overwrite input file. Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Alternatively, you can also skip compiling code (if you just want to check the types of your code):
1 |
|
TS5058
error TS5058: The specified path does not exist: βtest.jsonβ.
Broken Code β
1 |
|
Fixed Code βοΈ
You probably donβt have a TS config named test.json
. Try to load tsconfig.json
:
1 |
|
TS5069
error TS5069: Option βdeclarationMapβ cannot be specified without specifying option βdeclarationβ or option βcompositeβ.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to activate the βdeclarationβ property before you can activate βdeclarationMapβ:
1 |
|
TS5070
error TS5070: Option ββresolveJsonModuleβ cannot be specified without βnodeβ module resolution strategy.
Broken Code β
1 |
|
Fixed Code βοΈ
Just define the βmoduleResolutionβ property and set it to βnodeβ:
1 |
|
TS5083
error TS5083: Cannot read file β
base.json
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Your TS config is extending another config (called base.json
) which cannot be found. Make sure that this file (base.json
) exists or remove your extends
property.
TS5087
error TS5087: A labeled tuple element is declared as rest with a β
...
β before the name, rather than before the type.
Broken Code β
1 |
|
Fixed Code βοΈ
We have to move the rest operator to the label name:
1 |
|
TS5101
error TS5101: Option βimportsNotUsedAsValuesβ is deprecated and will stop functioning in TypeScript 5.5. Specify compilerOption ββignoreDeprecationsβ: β5.0ββ to silence this error. Use βverbatimModuleSyntaxβ instead.
1 |
|
Fixed Code βοΈ
The compiler option importsNotUsedAsValues is not recommended when using TypeScript 5 and above, so you have to remove it from your tsconfig.json file:
1 |
|
TS6053
error TS6053: File β
/typings/index.d.ts
β not found.
Broken Code β
1 |
|
Fixed Code βοΈ
Use relative paths when using Triple-Slash Directives:
1 |
|
Read more: 8 Steps to Migrating from JavaScript to TypeScript
TS6059
error TS6059: File β
/root/project/packages/server/package.json
β is not under βrootDirβ β/root/project/packages/server/src
β. βrootDirβ is expected to contain all source files.
Broken Code β
1 |
|
Fixed Code βοΈ
When using require
then we can access files outside the specified root folder for input files (βrootDirβ in βtsconfig.jsonβ):
1 |
|
An even better solution would be changing the βrootDirβ in your βtsconfig.jsonβ, so that it includes the βpackage.jsonβ file that you are trying to important. This may require you to also set βallowJsβ to true
in your βtsconfig.jsonβ.
TS6133
error TS6133: β
volume
β is declared but its value is never read.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
1 |
|
error TS6133: β
b
β is declared but its value is never read.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
You can remove the unused variable from your code or disable the check for unused variables in your TypeScript compiler config:
1 |
|
Video Tutorial
TS6138
error TS6138: Property β
lastName
β is declared but its value is never read.
Broken Code β
1 |
|
Fixed Code βοΈ
Simply make use of the lastName
property:
1 |
|
TS6192
error TS6192: All imports in import declaration are unused.
Broken Code β
1 |
|
Fixed Code βοΈ
When multiple imports from a package are not being used, you will receive error TS6192. You can easily fix it by removing the unused import statement:
1 |
|
TS6196
error TS6196: β
MyAbstractClass
β is declared but never used.
Broken Code β
1 |
|
Fixed Code βοΈ
You have three possibilities to fix the broken code:
- Make use of
MyAbstractClass
in your application - Export
MyAbstractClass
- Set βnoUnusedLocalsβ to
false
in your βtsconfig.jsonβ
1 |
|
TS6198
error TS6198: All destructured elements are unused.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to make use of the destructured values in your application / code:
1 |
|
TS6504
error TS6504: File β
mycode.js
β is a JavaScript file. Did you mean to enable the βallowJs
β option?
Broken Code β
1 |
|
Fixed Code βοΈ
You have to enable the βallowJSβ flag in your βtsconfig.jsonβ file:
1 |
|
Alternatively, you can enable it through the TypeScript Compiler CLI:
1 |
|
TS7006
error TS7006: Parameter β
person
β implicitly has an βany
β type.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
You have to define the type for the argument named person
:
1 |
|
Alternative, but not recommend:
- Set βnoImplicitAnyβ to
false
in your βtsconfig.jsonβ
TS7008
error TS7008: Member β
name
β implicitly has an βanyβ type.
Broken Code β
1 |
|
Fixed Code βοΈ
To fix the problem, you can initialize the class member so that TypeScript can infer the type:
1 |
|
Alternatively, you can annotate the type:
1 |
|
TS7009
error TS7009: βnewβ expression, whose target lacks a construct signature, implicitly has an βanyβ type.
Broken Code β
1 |
|
Fixed Code βοΈ
The resolve
function of a Promise
is not a constructor. You can use the new
keyword only with constructors, so the new
keyword has to be removed in order to fix the code:
1 |
|
Alternatively, you can make use of the constructor:
1 |
|
TS7010
error TS7010: β
sum
β, which lacks return-type annotation, implicitly has an βany
β return type.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to add a return-type annotation and preferably a function implementation:
1 |
|
TS7016
error TS7016: Could not find a declaration file for module β
uuidjs
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Solution 1
The problem shows that uuidjs
is a plain JavaScript module and doesnβt ship with TypeScript declaration files (.d.ts
). Thatβs why we have to use the CommonJS import syntax to import this module in a Node.js environment:
1 |
|
Solution 2
A proper fix would be to have a uuidjs.d.ts
as part of uuidjs
: https://github.com/LiosK/UUID.js/issues/6
Example:
1 |
|
1 |
|
Solution 3
If external typings are available in the DefinitelyTyped repository, then you can also install external declarations from there:
1 |
|
Solution 4
If there are no declarations available and you want to use the module (in this case uuidjs
) with standard import syntax (not CommonJS), then you can create a shorthand ambient module declaration by creating a β*.d.tsβ file and writing the following into it:
1 |
|
Video Tutorial
TS7017
error TS7017: Element implicitly has an β
any
β type because type β{}
β has no index signature.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to define the type for indexing your object properties (object["index"]
):
1 |
|
The name of the index can be freely chosen:
1 |
|
How to fix such errors in interfaces:
1 |
|
Alternative, but not recommend:
- Set βnoImplicitAnyβ to
false
in your βtsconfig.jsonβ
error TS7017: Element implicitly has an β
any
β type because type βtypeof globalThis
β has no index signature.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
Reference:
Video Tutorial
TS7022
error TS7022: β
window
β implicitly has type βany
β because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
Broken Code β
1 |
|
1 |
|
Fixed Code βοΈ
The above error can occur when TypeScript doesnβt know about the window interface. Make sure to add βdomβ to your list of known runtime libraries in your compiler options:
1 |
|
TS7023
error TS7023: β
fibonacci
β implicitly has return type βany
β because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.
Broken Code β
1 |
|
Fixed Code βοΈ
To avoid the implicit typing of any
for the return type, you have to add a return type annotation:
1 |
|
TS7026
error TS7026: JSX element implicitly has type βanyβ because no interface βJSX.IntrinsicElementsβ exists.
Broken Code β
1 |
|
Fixed Code βοΈ
The global JSX namespace is declared in @types/react
. You have to install the @types/react
package to make use of it:
1 |
|
TS7027
error TS7027: Unreachable code detected.
Broken Code β
1 |
|
Fixed Code βοΈ
Your code cannot print text to the standard output when your program is told to exit beforehand, so you have to remove the call to exit or place it at a later point in time:
1 |
|
TS7030
error TS7030: Not all code paths return a value.
Broken Code β
1 |
|
Fixed Code βοΈ
TypeScript reminds us that we forgot to return a value in case our if-condition doesnβt match. We can solve this problem in many ways.
Always return a value:
1 |
|
Add general else
:
1 |
|
Handle all cases
:
1 |
|
Add default
case:
1 |
|
Define that the return type can be void
:
1 |
|
Video Tutorial
TS7031
error TS7031: Binding element βageβ implicitly has an βanyβ type.
Broken Code β
1 |
|
Fixed Code βοΈ
TypeScript complains because it doesnβt know the type of the argument that we are destructuring. Thatβs why it sets all its properties to the type of any
. To prevent that we have to define a type for the parameter of the printAge
function:
1 |
|
TS7034
error TS7034: Variable β
expectations
β implicitly has type βany[]
β in some locations where its type cannot be determined.
Broken Code β
1 |
|
Fixed Code βοΈ
An array can collect values of different types, so we have to tell TypeScript which types we want to collect:
1 |
|
If we want to specify multiple types, we have to define a union type:
1 |
|
Alternative #1:
Create a type alias and provide a type annotation for the expectations
constant:
1 |
|
Alternative #2:
Use concrete values to initialize the expectations
array, so TypeScript can infer the array type for you:
1 |
|
Unrecommended solution:
- Set βnoImplicitAnyβ to
false
in your βtsconfig.jsonβ
TS7041
error TS7041: The containing arrow function captures the global value of β
this
β.
Broken Code β
1 |
|
Fixed Code βοΈ
Using this
is not allowed in arrow functions (source) because arrow functions arenβt made to work with call
, apply
and/or bind
methods (source). We have to replace our arrow function with an anonymous function declaration to prevent that our this
context gets captured:
1 |
|
Since ECMAScript 2015 (ES6) this can be shortened (Object Literal Property Value Shorthand) to:
1 |
|
TS7044
error TS7044: Parameter β
a
β implicitly has an βany
β type, but a better type may be inferred from usage.
Broken Code β
1 |
|
Fixed Code βοΈ
From the body of the arrow function expression, TypeScript can see by the *
that a
and b
may be of type number
:
1 |
|
TS7053
error TS7053: Element implicitly has an β
any
β type because expression of type βstring
β canβt be used to index type βPerson
β. No index signature with a parameter of type βstring
β was found on type βPerson
β.
Broken Code β
1 |
|
Fixed Code βοΈ
There are multiple ways to solve the error. You can define an index signature for the Person
interface which will allow all strings:
1 |
|
However, this is not recommend as it will allow you to access keys that are not defined (like age
):
1 |
|
The better solution is using the keyof
type operator which creates a literal union of its keys:
1 |
|
TS8020
error TS8020: JSDoc types can only be used inside documentation comments.
Broken Code β
1 |
|
Fixed Code βοΈ
If you wanted to make c
optional:
1 |
|
If you wanted to document c
with JSDoc:
1 |
|
TS17000
error TS17000: JSX attributes must only be assigned a non-empty βexpressionβ.
Broken Code β
1 |
|
Fixed Code βοΈ
You canβt use an empty expression ({}
) in JSX attributes:
1 |
|
TS17004
error TS17004: Cannot use JSX unless the ββjsxβ flag is provided.
Broken Code β
1 |
|
Fixed Code βοΈ
You have to add a configuration for βjsxβ to your βtsconfig.jsonβ file:
1 |
|
TS17009
error TS17009: βsuperβ must be called before accessing βthisβ in the constructor of a derived class.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|
TS18004
error TS18004: No value exists in scope for the shorthand property β
age
β. Either declare one or provide an initializer.
Broken Code β
1 |
|
Fixed Code βοΈ
If you want to use the shorthand property name syntax to access the age
property, you have to make sure that this variable is defined in the first place:
1 |
|
Alternatively, you can avoid using the shorthand property name syntax:
1 |
|
TS18016
error TS18016: Private identifiers are not allowed outside class bodies.
Broken Code β
1 |
|
Fixed Code βοΈ
Private properties can only be used in classes but not in interfaces. We therefore need to convert the interface into a class in order to be able to compile the code:
1 |
|
TS18046
error TS18046: β
error
β is of type βunknown
β.
Broken Code β
1 |
|
Fixed Code βοΈ
If you set the useUnknownInCatchVariables
option to true
in your tsconfig.json
file, you may encounter the TS18046 error.
Enabling the useUnknownInCatchVariables feature causes the error within a catch clause to be treated as the unknown
type instead of any
. As a result, you will need to incorporate a type guard or an assertion function to access properties on an object of type unknown
:
1 |
|
TS18048
error TS18048: β
text
β is possibly βundefined
β.
Broken Code β
1 |
|
Fixed Code βοΈ
If the text
parameter is optional, it can potentially be of type unknown
. When the type is unknown
, accessing methods like Array.slice is not possible.
To solve this error, we need to employ a type guard to ensure that text
is of type string
:
1 |
|
Note: We also need to employ a default return value to maintain the function return type of string
.
TS80005
error TS80005: βrequireβ call may be converted to an import.
Broken Code β
1 |
|
Fixed Code βοΈ
1 |
|