Typescript saves ridiculous amounts of time in bugfixes and is IMO a lot more readable than JS.
I don’t know how many times TS has complained about some type mismatch in my code that made me scratch my head for 2 seconds to only then realize I was doing something stupid. With plain JS that would’ve been no issue, until I have some obscure bug 30 minutes later and have to figure out it’s source.
Also, whatever piece of code you are working on, to do anything you have to have the types of your variables/functions in mind. If you have to keep track of all of them in your head, you will definitely mess it up at some point or have to look through a bunch of different methods/files to track down the source of some piece of data to be certain what’s contained in it.
So yeah, TS might take slightly longer to type out, but it saves you a lot of dev time.
I mean I guess that could be helpful, I’ve never really had that issue so I have yet to see the benefit of it. I just find it useless work that you’re typing out for something that the engine itself isn’t going to be able to see anyway, which means you’re going to have to have unit tests coded in regardless. And I wouldn’t say just a little more coding, typescript when implemented into my project doubled the amount of code provided, I’m trying to use it because I do understand it’s a standard, but I really don’t understand why it’s a universal standard, considering that everything it does is completely syntax sugar/coder side and it doesn’t actually interact with the underlying engine. I feel the same way about coffee script honestly.
First of all, Typescript isn’t a standard, much less a universal standard - it’s a fairly patchy implementation of strong typing over JavaScript, created by a private corporation. If you’re going to write strongly typed JavaScript, it’s probably the best option, though not the only option. If you want a strongly typed, functional language, and are not wedded to JavaScript, it’s definitely not the best option.
Strong typing is an incredibly powerful tool,and will make your life easier, once you wrap your head around it, but it isn’t the only way to go, for all projects. There are definitely some (typically small) projects that benefit from a more dynamic typing system.
I am not really sure what you are saying about unit tests. It sounds like you are saying you think you need unit tests to assure types on the JavaScript level, even when working in typescript. That’s not the case. You can trust the compile-time type system, if you type your code. You still should have unit tests, of course, but you really don’t need unit tests that check that the types are what your typescript typing says they are. In fact, the more skilled you get at building good types, the fewer tests you’ll need. They’re always a compliment, the goal isn’t to eliminate tests at all, but you will get better safety with less testing.
Typescript probably shouldn’t be doubling the amount of code. This sounds like you might be adding a lot of redundant type aliases, or specifying types that should be inferred. I’m not sure, I’d have to see the code.
You also might want to look at your toolchain. Are you doing a bunch of coding, then running tsc and looking at the results? Or do you have an editor set up that can show you typescript errors and suggested completion in real time? It makes a huge difference, having a toolchain that really supports rapid, iterative, strongly typed development.
So the biggest issue is the project relies extremely heavily on a third party API service, and since the data is received over said service, typescript is unable to infer what the objects the API is sending is because it sends during runtime, to get around this I have to define everything that I expect that the library is going to have to handle that would be Recieved, since any object that the API is going to return is just going to have a type of any if it’s not defined, this on top of the fact that the API has stated that the data being sent should not be relied on for being accurate and types may change randomly(usually it does not but it has happend, it sucks but out of my control) means that I generally also have to have a function level test the data when it’s received to make sure that the value is being supplied are the correct type and are formatted in a way that the library can still understand it. Which means that it’s able to catch any inconsistency of typing before it would be processed anyway, and would either warn or throw depending on how important the function is to actual operation.
The reason why I would call it standard is because it seems like basically anywhere you look if you are using node, you’re using typescript they go hand in hand it seems as of the last two or three years, but honestly I’ve never really understood the benefit of, I’ve always thought it was a fairly standard to have at the beginning of a function the documentation of what each perimeter should be unless it is easily verified by looking at it.
As for my setup, it’s not very advanced it’s just Sublime Text with linter hooked to it, which does tell me on save if there’s a typescript error or if I formatted something wrong, but again even if one did happen to slip through that it would fail during the testing phase due to the fact that it would throw at the function level.
My opinion of my experience with typescript has been that it’s great if everything is operated in house, but the second you start having to deal with stuff that comes from an external source any advantage of the check just seems not worth the extra effort to make sure typescript works right.
TypeScript is essentially the “measure twice, cut once” approach to JavaScript.
Yeah, anything can be anything in JS and the type declarations don’t make it into the compiled JS, but allowing anything to be anything starts to become fairly dangerous when the size of your projects starts to grow and especially when you’re working with a team.
Rather than writing functions and just hoping they always get called with a parameter that has the properties you expect to use, TypeScript helps you make sure that you always are calling that function with the right object in the arguments. You don’t need to debug some runtime error up and down 8 frames in the call stack because this week you named a property “maxValue” but last week you used “maxVal” or you forgot to parseInt some string because you thought it would be coerced - you just need to make sure your types match and eliminate that type of debugging altogether.
All in all, TS really just enforces a bit of sanity to the foot gun that is vanilla JS.
Yeah I fully agree typescript does help in terms of knowing what type of types you should be supplying to functions, and for the most part I do use it for non-library purpose/anything that doesn’t rely on a third party, I just feel like typescript isn’t worth it when you have data that’s returned at run time that’s controlled by a third party service. You end up coding more in class definition files then you would just using normal tests
Typescript saves ridiculous amounts of time in bugfixes and is IMO a lot more readable than JS.
I don’t know how many times TS has complained about some type mismatch in my code that made me scratch my head for 2 seconds to only then realize I was doing something stupid. With plain JS that would’ve been no issue, until I have some obscure bug 30 minutes later and have to figure out it’s source.
Also, whatever piece of code you are working on, to do anything you have to have the types of your variables/functions in mind. If you have to keep track of all of them in your head, you will definitely mess it up at some point or have to look through a bunch of different methods/files to track down the source of some piece of data to be certain what’s contained in it.
So yeah, TS might take slightly longer to type out, but it saves you a lot of dev time.
I mean I guess that could be helpful, I’ve never really had that issue so I have yet to see the benefit of it. I just find it useless work that you’re typing out for something that the engine itself isn’t going to be able to see anyway, which means you’re going to have to have unit tests coded in regardless. And I wouldn’t say just a little more coding, typescript when implemented into my project doubled the amount of code provided, I’m trying to use it because I do understand it’s a standard, but I really don’t understand why it’s a universal standard, considering that everything it does is completely syntax sugar/coder side and it doesn’t actually interact with the underlying engine. I feel the same way about coffee script honestly.
Just wait until you have to work as part of a team on a big project. The lack of types will murder the team’s productivity
OK, so, a lot here.
First of all, Typescript isn’t a standard, much less a universal standard - it’s a fairly patchy implementation of strong typing over JavaScript, created by a private corporation. If you’re going to write strongly typed JavaScript, it’s probably the best option, though not the only option. If you want a strongly typed, functional language, and are not wedded to JavaScript, it’s definitely not the best option.
Strong typing is an incredibly powerful tool,and will make your life easier, once you wrap your head around it, but it isn’t the only way to go, for all projects. There are definitely some (typically small) projects that benefit from a more dynamic typing system.
I am not really sure what you are saying about unit tests. It sounds like you are saying you think you need unit tests to assure types on the JavaScript level, even when working in typescript. That’s not the case. You can trust the compile-time type system, if you type your code. You still should have unit tests, of course, but you really don’t need unit tests that check that the types are what your typescript typing says they are. In fact, the more skilled you get at building good types, the fewer tests you’ll need. They’re always a compliment, the goal isn’t to eliminate tests at all, but you will get better safety with less testing.
Typescript probably shouldn’t be doubling the amount of code. This sounds like you might be adding a lot of redundant type aliases, or specifying types that should be inferred. I’m not sure, I’d have to see the code.
You also might want to look at your toolchain. Are you doing a bunch of coding, then running tsc and looking at the results? Or do you have an editor set up that can show you typescript errors and suggested completion in real time? It makes a huge difference, having a toolchain that really supports rapid, iterative, strongly typed development.
So the biggest issue is the project relies extremely heavily on a third party API service, and since the data is received over said service, typescript is unable to infer what the objects the API is sending is because it sends during runtime, to get around this I have to define everything that I expect that the library is going to have to handle that would be Recieved, since any object that the API is going to return is just going to have a type of any if it’s not defined, this on top of the fact that the API has stated that the data being sent should not be relied on for being accurate and types may change randomly(usually it does not but it has happend, it sucks but out of my control) means that I generally also have to have a function level test the data when it’s received to make sure that the value is being supplied are the correct type and are formatted in a way that the library can still understand it. Which means that it’s able to catch any inconsistency of typing before it would be processed anyway, and would either warn or throw depending on how important the function is to actual operation.
The reason why I would call it standard is because it seems like basically anywhere you look if you are using node, you’re using typescript they go hand in hand it seems as of the last two or three years, but honestly I’ve never really understood the benefit of, I’ve always thought it was a fairly standard to have at the beginning of a function the documentation of what each perimeter should be unless it is easily verified by looking at it.
As for my setup, it’s not very advanced it’s just Sublime Text with linter hooked to it, which does tell me on save if there’s a typescript error or if I formatted something wrong, but again even if one did happen to slip through that it would fail during the testing phase due to the fact that it would throw at the function level.
My opinion of my experience with typescript has been that it’s great if everything is operated in house, but the second you start having to deal with stuff that comes from an external source any advantage of the check just seems not worth the extra effort to make sure typescript works right.
TypeScript is essentially the “measure twice, cut once” approach to JavaScript.
Yeah, anything can be anything in JS and the type declarations don’t make it into the compiled JS, but allowing anything to be anything starts to become fairly dangerous when the size of your projects starts to grow and especially when you’re working with a team.
Rather than writing functions and just hoping they always get called with a parameter that has the properties you expect to use, TypeScript helps you make sure that you always are calling that function with the right object in the arguments. You don’t need to debug some runtime error up and down 8 frames in the call stack because this week you named a property “maxValue” but last week you used “maxVal” or you forgot to parseInt some string because you thought it would be coerced - you just need to make sure your types match and eliminate that type of debugging altogether.
All in all, TS really just enforces a bit of sanity to the foot gun that is vanilla JS.
Yeah I fully agree typescript does help in terms of knowing what type of types you should be supplying to functions, and for the most part I do use it for non-library purpose/anything that doesn’t rely on a third party, I just feel like typescript isn’t worth it when you have data that’s returned at run time that’s controlled by a third party service. You end up coding more in class definition files then you would just using normal tests