microsoft / microsoft/TypeScript
Add type definition for Math.sumPrecise (ES2025 / TC39 proposal)
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
Bug report
📝 Description
Math.sumPrecise is part of the TC39 proposal-math-sum which reached Stage 4 on 2025-07-28, making it part of ES2026 (not ES2025 as originally stated — the proposal missed the ES2025 cutoff by about one month). Major runtimes like Bun, Firefox 137+, and Safari 18.4 have already implemented it, though V8/Node.js has not yet.
However, TypeScript does not include type definitions for this API — searching through all lib.es*.d.ts files yields no results for sumPrecise.
🐛 The problem
This causes a compile error:
Property 'sumPrecise' does not exist on type 'Math'. ts(2339)
Users are forced to either:
- Use workarounds like type augmentation (
global.d.ts) - Fall back to
@ts-expect-error - Use incorrect alternatives like
Array.reduce((a, b) => a + b)which lose precision
✅ Expected behavior
The interface Math should be extended in lib.esnext.math.d.ts:
interface Math {
/**
* Returns the sum of the values in the iterable using a more precise
* summation algorithm than naive floating-point addition.
* Returns `-0` if the iterable is empty.
* @param numbers An iterable (such as an Array) of numbers.
* @throws {TypeError} If `numbers` is not iterable, or if any value in the iterable is not of type `number`.
* @throws {RangeError} If the iterable yields 2^53 or more values.
*/
sumPrecise(numbers: Iterable<number>): number;
}
🔗 Related
- TC39 Proposal: https://github.com/tc39/proposal-math-sum
- Stage 4 meeting notes: https://github.com/tc39/notes/blob/main/meetings/2025-07/july-28.md#mathsumprecise-for-stage-4
- MDN Docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sumPrecise
- Firefox 137+: shipped
- Safari 18.4 (JavaScriptCore): shipped
- Bun: shipped
- V8 / Node.js / Chrome: not yet
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans lib.esnext.math.d.ts et comparez la déclaration nécessaire pour Math.sumPrecise avec la proposition TC39 liée et les définitions existantes de Math. Le travail est terminé lorsque l’interface Math expose sumPrecise avec la signature documentée d’un itérable de nombres et que TypeScript accepte les appels sans augmentation ni suppression d’erreur.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, typescript
- Domaine
- tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- Active
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 84/100