我可以在Typescript中创建类[]运算符吗
是否有方法覆盖typescript中的[]操作?我们使用1.4,因此我们可以使用需要1.4的解决方案 更新:我在最初的问题中非常不清楚。我的意思是我可以把它作为操作符添加到类中。在我的课堂上,我目前有一种方法:我可以在Typescript中创建类[]运算符吗,typescript,typescript1.4,Typescript,Typescript1.4,是否有方法覆盖typescript中的[]操作?我们使用1.4,因此我们可以使用需要1.4的解决方案 更新:我在最初的问题中非常不清楚。我的意思是我可以把它作为操作符添加到类中。在我的课堂上,我目前有一种方法: public get(index : number) : LinkedListNode<t> { if (this._first === null || (index >= this._count)) { return null; }
public get(index : number) : LinkedListNode<t> {
if (this._first === null || (index >= this._count)) {
return null;
}
var node = this._first;
while (index-- > 0) {
node = node._next;
}
return node;
}
公共获取(索引:编号):LinkedListNode{
if(this._first==null | |(index>=this._count)){
返回null;
}
var node=这个。\首先;
而(索引-->0){
节点=节点。\u下一步;
}
返回节点;
}
我希望能够调用data[5],而不是data.get(5)
有办法做到这一点吗
感谢并抱歉最初的问题非常不准确。通常,数组是变量/值的列表(可能是字符/整数/浮点) 相反,您可以手动使用对象。。 例如:
var objtest={first:“一”,second:“两”}代码>
然后您可以这样使用每个元素:
objtest.first;——输出一
第二个目标;——产出二
如果需要,可以将其用作每个变量
例如:
var first=“一”;
var second=“两”代码>
我更喜欢用第一种方法
我希望这有帮助 在JavaScript/TypeScript中不能重载运算符
使用ECMAScript 6,您将能够使用。TypeScript 1.5添加了目标ES6。但是迭代器在以ES5/3为目标的TypeScript中不可用。Update
作为对您问题更新的回应,不,不可能为您不能执行data[5]
而不是data.get(5)
的类重载索引运算符
在我看来,之所以没有实现,是因为JavaScript允许使用括号访问对象的属性,这会产生一些歧义。例如,如果data.myProperty
是一个存在的属性,并且调用了data['myProperty']
,则很难确定它是否应返回myProperty
属性,或者字符串“myProperty”是否应传递给索引重载
原始答案
无法更改以下结果:
var a = [];
想象一下,如果允许人们改变这种行为,会出现什么问题?库A可以用一种方式定义它,然后库B可以用自己的行为覆盖它。。。意思是库B现在使用库A的[]
行为
您可以做的是将方法添加到数组的原型中:
interface Array {
log: () => void;
}
Array.prototype.log = function() {
console.log(JSON.stringify(this));
};
然后使用:
var a = [];
a.log();
但是,不建议这样做!您不应该修改您不拥有的对象,因为这可能会导致无法预见的问题。不这样做的原因类似于改变[]
的行为会导致问题的原因:
库A定义了log
方法李>
库B定义了一个工作方式不同的log
方法李>
现在库A的log
方法无法按预期工作,因为它使用库B的方法
建议
我建议您创建自己的阵列实现:
class MyArray<T> implements Array<T> {
private _underlyingArray : Array<T> = [];
// implement methods for Array here
log() {
console.log(JSON.stringify(this._underlyingArray));
}
}
类MyArray实现数组{
私有_underyingarray:Array=[];
//在这里实现数组的方法
日志(){
log(JSON.stringify(this._underyingarray));
}
}
或创建帮助器类:
class ArrayHelper {
static log<T>(a: Array<T>) {
console.log(JSON.stringify(a));
}
}
类阵列帮助器{
静态日志(a:数组){
log(JSON.stringify(a));
}
}
为什么出于兴趣而要这样做?作为您,我怀疑Typescript是否支持它。@X.L.Ant您的怀疑是正确的。没有。不,也不要这样做。我更新了我的问题,这显著地改变了它,因此改变了答案。很抱歉造成混淆。很抱歉,您的答案没有提到重载[]
。您提到的是重载和非重载,这意味着我没有做错任何事情,请在我的帖子上投票。您的答案没有提到在调用[]
时执行不同的操作。“重写操作”。是的,从字面上说,你是对的!我投票非常感谢:)太感谢你了。我更新了我的问题,这大大改变了它,因此改变了答案。抱歉搞混了。是的,我看到了。我更新了我的答案来回答它,但也保留了原来的答案,以防对其他人有所帮助。