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.
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.