typescript - 如何在 TypeScript 中限制为只有 2 个数字索引签名类
问题描述
谷歌搜索了一段时间后,我找不到适合我的正确答案。
我想声明一个类,它有一个只允许0
和1
数字键的数字索引。
这是我到目前为止所拥有的:
class TupleWrapperClass{
[values:number]
constructor(value1: number, value2: number) {
this[0] = value1;
this[1] = value2;
}
}
这个想法是这个类表示一个数字元组[number,number]
,并且只能存储 2 个数字。我遇到的问题是它允许添加超过 2 个元素:
let t = new TupleWrapperClass(0,3);
console.log(t[0]); // Output: 0
console.log(t[1]); // Output: 3
console.log(t[2]); // Output: undefined
t[2] = 7
console.log(t[2]); // Output: 7
我已经阅读了一些他们定义类型和索引器的答案,这似乎有效
type Index = 0 | 1
type TupleWrapperType = { [k in Index]?: number }
但是,我无法进行类型检查:
let t: TuppleWrapperType = { 0: 2, 1: 5 };
if(typeof t === TuppleWrapperType){} // Fails.
我已经阅读了很多关于自定义类型以及为什么我们不能在运行时检查它们的类型的内容,这就是我转而创建自定义类的原因,因为这让我可以进行类型检查:
let t = new TupleWrapperClass(0,3);
if(t instanceof TuppleWrapperClass){} // All good
如何将我的 TupleWrapperClass 限制为仅 2 个索引?
解决方案
这个怎么样,在实例化之前在类中声明类型
class TupleWrapperClass{
0: number;
1: number;
constructor(value1: number, value2: number) {
this[0] = value1;
this[1] = value2;
}
}
let t = new TupleWrapperClass(0,3);
console.log(t[0]); // OK
console.log(t[1]); // OK
console.log(t[2]); // Type Error
推荐阅读
- filter - Microsoft Graph 驱动器筛选器不适用
- matlab - 我无法在条形尖端上方绘制值,XEndPoints 不起作用
- html - 滚动上的粘性导航>为页面内容添加类
- java - 死信通道如何获取源路由?
- sql-server - Nifi CSV行处理到sql server - 检查主键
- windows - 如何在 Windows 上使用 Microsoft Visual Studio 编译 GNU Radio 应用程序
- txt - 如何在冗长的文档中删除无效的 ASCII 码。请具体说明
- swift - 为什么有些人会继续显示工作表,而同一个故事板中的另一个人会显示工作表而不执行和编码
- php - 共享php源文件而不共享密码到SQL server
- python - 将“object”转换为“float”后,所有值都是 NaN - 如何解决这个问题?