javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > TypeScript  number bigint string

TypeScript 中number、bigint与 string

作者:小赵同学WoW

number、bigint 和 string 都是 TypeScript 的原始类型,本篇重点整理它们的声明、推断、字面量类型、运算规则及常见误区,感兴趣的可以了解一下

摘要

number、bigint 和 string 都是 TypeScript 的原始类型。本篇重点整理它们的声明、推断、字面量类型、运算规则及常见误区。

背景

TypeScript 在 JavaScript 原始值的基础上增加了静态类型检查。理解这三个类型时,需要同时区分:

类型对比

类型可表示的值字面量示例typeof 结果
number整数、浮点数、NaN、Infinity 等100、3.14'number'
bigint任意精度的整数100n'bigint'
string文本字符串'hello'、"hello"、`hello`'string'

注意事项:类型标注应使用小写的 number、bigint、string,不要使用包装对象类型 Number、BigInt、String。

number

核心概念

声明与类型推断

let count = 100;
let price: number = 19.9;
const statusCode = 200;
let fixedCode: 200 = 200;

console.log(typeof count); // 输出: number

不同进制的数字字面量

const decimal = 20;
const binary = 0b10100;
const octal = 0o24;
const hexadecimal = 0x14;

console.log(decimal === binary && binary === octal && octal === hexadecimal); // 输出: true

这些写法只影响代码中的表示形式,运行时得到的值都属于 number。

精度问题

const unsafeInteger = Number.MAX_SAFE_INTEGER + 1;

console.log(unsafeInteger === Number.MAX_SAFE_INTEGER + 2); // 输出: true
console.log(0.1 + 0.2 === 0.3); // 输出: false

注意事项

bigint

核心概念

创建方式

const largeId = 9007199254740993n;
const orderId = BigInt('9007199254740993');
let total: bigint = 100n;
const fixedTotal: 100n = 100n;

console.log(typeof largeId); // 输出: bigint
const precise = BigInt('9007199254740993');
const alreadyRounded = BigInt(9007199254740993);

console.log(precise); // 输出: 9007199254740993n
console.log(alreadyRounded); // 输出: 9007199254740992n

运算规则

const left = 10n;
const right = 3n;

console.log(left + right); // 输出: 13n
console.log(left / right); // 输出: 3n
console.log(10n < 20); // 输出: true

下面两种写法都会产生类型错误:

let normalValue: number = 100;
let bigValue: bigint = 100n;

normalValue = bigValue;
const result = normalValue + bigValue;

需要先根据业务语义显式转换类型:

const numberResult = 10 + Number(20n);
const bigintResult = BigInt(10) + 20n;

console.log(numberResult); // 输出: 30
console.log(bigintResult); // 输出: 30n

编译与运行环境

使用 100n 这类 bigint 字面量时,tsconfig.json 中的 target 应设置为 ES2020 或更高版本;使用 BigInt() 还需要相应的标准库和运行时支持。

{
  "compilerOptions": {
    "target": "ES2020",
    "lib": ["ES2020", "DOM"]
  }
}

注意事项

string

核心概念

声明与字符串形式

const singleQuoted = 'TypeScript';
const anotherText = 'JavaScript';
const version = 5;
const templateText = `TypeScript ${version}`;
let message: string = 'hello';

console.log(templateText); // 输出: TypeScript 5
console.log(typeof message); // 输出: string

字符串字面量类型

字符串字面量类型可以把变量限制在明确的字符串集合内:

type RequestMethod = 'GET' | 'POST';

let method: RequestMethod = 'GET';
method = 'POST';

console.log(method); // 输出: POST

这种写法比宽泛的 string 更精确,适合表示状态、操作类型、配置项等有限值。

模板字面量类型

模板字面量不仅能创建字符串值,也能在类型层面组合字符串格式。

type EventName = 'click' | 'change';
type HandlerName = `on${Capitalize<EventName>}`;

const handler: HandlerName = 'onClick';

console.log(handler); // 输出: onClick

注意事项

类型推断与字面量类型总结

let mutableNumber = 10;
const immutableNumber = 10;
let mutableBigInt = 10n;
const immutableBigInt = 10n;
let mutableString = 'hello';
const immutableString = 'hello';

以上变量通常会被推断为:

声明推断类型
let mutableNumber = 10number
const immutableNumber = 1010
let mutableBigInt = 10nbigint
const immutableBigInt = 10n10n
let mutableString = 'hello'string
const immutableString = 'hello''hello'

工作机制:let 声明的变量可能在后续被重新赋值,因此 TypeScript 通常会将字面量拓宽为对应的基础类型;const 变量不能重新赋值,因此可以保留更精确的字面量类型。

类型转换总结

目标类型常用转换方式主要风险
numberNumber(value)无效字符串得到 NaN;大整数可能丢失精度
bigintBigInt(value)小数或非法字符串会抛出错误
stringString(value)对象转换结果取决于自身的字符串转换逻辑

常见误区

到此这篇关于TypeScript 中number、bigint与 string的文章就介绍到这了,更多相关TypeScript number bigint string内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文