You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中使用unique symbol作为对象属性?

TypeScript中unique symbol作为对象属性的正确用法

首先得明确:unique symbol是TypeScript的单例类型,每个声明为unique symbol的变量都是独一无二的,普通Symbol()创建的值是通用symbol类型,和unique symbol不兼容——这就是你代码报错的核心原因。

你写的interface MyInterface { readonly id: unique symbol; },是要求id属性的值是某个特定的unique symbol实例,但你赋值的Symbol("id")只是普通symbol,类型自然不匹配。

正确使用方式分两种场景:

1. 用unique symbol作为属性名(解决你提到的“计算属性名称”错误)

先声明一个unique symbol常量,再通过计算属性语法在接口里定义:

const bar: unique symbol = Symbol("bar");

interface MyInterface {
    [bar]: string; // 以unique symbol作为计算属性名
}

const foo: MyInterface = {
    [bar]: "hello",
};

2. 用unique symbol作为属性值的类型

先声明具体的unique symbol常量,再在接口里引用它的类型:

// 声明唯一的symbol常量
const idSymbol: unique symbol = Symbol("id");

// 接口指定id属性为这个特定的unique symbol类型
interface MyInterface {
    readonly id: typeof idSymbol;
}

// 赋值时必须使用这个特定的symbol
const foo: MyInterface = {
    id: idSymbol,
};

为什么不能直接在接口里写id: unique symbol?因为unique symbol不能单独作为属性类型使用,它必须绑定到具体的常量实例——TypeScript不允许用“任意unique symbol”来定义属性类型,必须明确指定是哪一个。另外要注意:unique symbol只能用const声明,用let/var会直接报错。

内容的提问来源于stack exchange,提问作者Robo Robok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:02:36