microsoft / microsoft/TypeScript
Add type definition for Math.sumPrecise (ES2025 / TC39 proposal)
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
---
### Bug report
#### 📝 Description
`Math.sumPrecise` is part of the [TC39 `proposal-math-sum`](https://github.com/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`:
```typescript
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;
}
```
#### 🔗 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
---
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in lib.esnext.math.d.ts and compare the declaration needed for Math.sumPrecise with the linked TC39 proposal and existing Math definitions. The work is complete when the Math interface exposes sumPrecise with the documented iterable-of-number signature and TypeScript accepts calls without an augmentation or error suppression.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, typescript
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 84/100