Skip to content

@sciexpr/chemistry

化学专用包 — 元素周期表、化学式验证、反应平衡、氧化数计算。

安装

bash
npm install @sciexpr/chemistry

元素周期表

typescript
import { PERIODIC_TABLE, ELEMENT_MAP, ELEMENT_BY_NUMBER } from '@sciexpr/chemistry'

// 118 元素完整数据
PERIODIC_TABLE.length // 118

// 按符号查询
ELEMENT_MAP.get('fe')
// → { symbol:'Fe', nameCN:'铁', nameEN:'Iron', atomicNumber:26, electronegativity:1.83, ... }

// 按原子序数查询
ELEMENT_BY_NUMBER.get(79)
// → { symbol:'Au', nameCN:'金', ... }

元素数据结构

typescript
interface ElementData {
  symbol: string          // H, He, Na, ...
  atomicNumber: number    // 1-118
  atomicMass: number
  nameCN: string          // 中文名
  nameEN: string          // 英文名
  group: number           // 族 (1-18)
  period: number          // 周期 (1-7)
  block: 's' | 'p' | 'd' | 'f'
  electronegativity?: number
  oxidationStates?: number[]
  electronConfiguration?: string
  commonCompounds?: string[]
}

化学式验证器

typescript
import { FormulaValidator } from '@sciexpr/chemistry'

const validator = new FormulaValidator()

// 验证元素符号
validator.isValidSymbol('H')   // true
validator.isValidSymbol('Na')  // true
validator.isValidSymbol('Xyz') // false

// 验证化学式文本
validator.validateText('H2O')     // { valid: true }
validator.validateText('H2SO4')   // { valid: true }
validator.validateText('Ca(OH)2') // { valid: true }

// 验证 AST 节点
validator.validate(astNode)
// → { valid, errors: [{ code, message, node? }], warnings }

反应平衡器

typescript
import { ReactionBalancer } from '@sciexpr/chemistry'

const balancer = new ReactionBalancer()

// 检查元素守恒
const result = balancer.checkConservation(
  ['2NaOH', 'H2SO4'],
  ['Na2SO4', '2H2O'],
)
// → { balanced: true, reactantsCount:{Na:2,O:6,H:4,S:1}, productsCount:{...}, imbalances:[] }

// 不平衡示例
balancer.checkConservation(['H2', 'O2'], ['H2O'])
// → { balanced: false, imbalances: [{ symbol:'O', reactantCount:2, productCount:1, difference:-1 }] }

氧化数计算

typescript
import { OxidationCalculator } from '@sciexpr/chemistry'

const calc = new OxidationCalculator()

calc.getOxidationStates('H')    // [1, -1]
calc.getOxidationStates('Fe')   // [3, 2]
calc.isMetal('Fe')              // true
calc.isNonMetal('O')            // true
calc.getElectronegativity('F')  // 3.98
calc.getElectronegativity('Na') // 0.93

基于 MIT 协议发布