@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