GithubHelp home page GithubHelp logo

Comments (9)

MartinJohns avatar MartinJohns commented on April 30, 2024 1

This is working as intended. First of all, this is just how JavaScript works, it's completely unrelated to TypeScript. Secondly, the documentation makes clear that the values are converted to strings and then sorted, when no comparer is provided:

If omitted, the array elements are converted to strings, then sorted according to each character's Unicode code point value.

Duplicate of #32593.

from typescript.

MartinJohns avatar MartinJohns commented on April 30, 2024 1

That's explicitly out of scope for TypeScript. The compiled TypeScript code should behave as-is, just with the types removed. See also: TypeScript Design Goals

from typescript.

MartinJohns avatar MartinJohns commented on April 30, 2024 1

Same for Float64Array or BigInt64Array auto deduction, it's type information.

Those are actual runtime types provided by JavaScript. A Float64Array is not an Array. That's also why they have different runtime behaviors. They're also limited in what they can do, e.g. a BigInt64Array can't store floating point numbers.

With "sort-compare" I would need to write custom comparators everytime with only-numbers array.

🤷‍♂️ You have to deal with the quirks of the runtime you're dealing with.

from typescript.

demensdeum avatar demensdeum commented on April 30, 2024

@MartinJohns wanted to say that new Float64Array([16, 1, 0, 9, 100]).sort() works correctly

from typescript.

MartinJohns avatar MartinJohns commented on April 30, 2024

Yes, different types can behave differently. As documented, when omitting the comparer for Float64Arrays sort method the values are sorted by their numeric value:

This method has the same algorithm as Array.prototype.sort(), except that it sorts the values numerically instead of as strings by default.
[..]
If omitted, the typed array elements are sorted according to numeric value.

But again, that's just how JavaScript works and completely unrelated to TypeScript. TypeScript won't change how your code is run.

from typescript.

demensdeum avatar demensdeum commented on April 30, 2024

@MartinJohns
Ok, thnx.
I think it's could be good to transpile to Float64Array or BigInt64Array, like C++ do it with auto deduction.

from typescript.

demensdeum avatar demensdeum commented on April 30, 2024
  1. But isn't JS does not support generics, but TS does?
  2. So I guess this is good field to improve in TS, because sorting numbers in lex order is frustrating.

from typescript.

MartinJohns avatar MartinJohns commented on April 30, 2024
  1. But isn't JS does not support generics, but TS does?

Generics only exist at compile time, they're just type information. After compilation anything generic related is completely gone. There's no runtime behavior.

So I guess this is good field to improve in TS, because sorting numbers in lex order is frustrating.

Again, this is explicitly out of scope. See the document I linked. Just provide a comparer if you want numerical sorting for arrays.

You might also want this ESlint rule: require-array-sort-compare

from typescript.

demensdeum avatar demensdeum commented on April 30, 2024

Generics only exist at compile time, they're just type information. After compilation anything generic related is completely gone. There's no runtime behavior.

Same for Float64Array or BigInt64Array auto deduction, it's type information.

require-array-sort-compare

Good rule, but I want to be my code DRY as possible, which could be achieved with Float64Array/BigInt64Array types.
With "sort-compare" I would need to write custom comparators everytime with only-numbers array.

from typescript.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.