C# is not flexible enough. Nominal typing is too rigid. You can't `return {foo:bar}` from a method and have type safety. You can't declare type inline way.
While I do miss TypeScript’s type system every now and then in C#, I wouldn't say that those are blockers in day to day usage of the language. For me at least this never really stumped me in a way that productivity was impacted by it.
I guess if you really want to, you can do a lot with tuples and if you need the equivalent of object literals and spreading, you could use records ... both options with fairly minimal additional effort over what you would have written in TypeScript.
I guess if you really want to, you can do a lot with tuples and if you need the equivalent of object literals and spreading, you could use records ... both options with fairly minimal additional effort over what you would have written in TypeScript.