另一个新手TypeScript错误“TypeError:无法设置属性'3'未定义”

问题描述:

我认为这是创建转换数组的问题,但我不明白为什么!另一个新手TypeScript错误“TypeError:无法设置属性'3'未定义”

类文本

export enum STATE_ID { CGU, Initial, Previous, Question} 
export enum CHOICE_ID {CGU_accepted, CGU_not_accepted} 

export class STATE_MACHINE { 
    constructor (context: string) { 
    this.transitions_initialize() 
} 
put_transition (source: STATE_ID, target: STATE_ID, label: CHOICE_ID): void 
{console.log(this.transitions.length.toString) 
    this.transitions[source][label] = target 
} 
private transitions: STATE_ID[][] = new Array() 
private transitions_initialize(): void { 
    this.put_transition(STATE_ID.Initial, STATE_ID.Question,            
                CHOICE_ID.CGU_accepted) 
    this.put_transition(STATE_ID.Initial, STATE_ID.CGU,   
               CHOICE_ID.CGU_not_accepted) 
    } 
} 
new STATE_MACHINE("test") 

错误

[Function: toString] 
Z:\Documents\Phi\Developpement\TypeScript\test3\state_machine.js:45 
    this.transitions[source][label] = target; 
            ^
TypeError: Cannot set property '3' of undefined 
    at STATE_MACHINE.put_transition (Z:\Docum................ 

任何想法?

在TypeScript/JavaScript中使用多维数组之前,您需要初始化每个元素。当你这样做:

private transitions: STATE_ID[][] = new Array() 

你已经创建transitions阵列。它不包含任何元素。每个元素应该是STATE_ID[]类型。如果你想要这样的元素存在,你必须先创建它。例如:

put_transition (source: STATE_ID, target: STATE_ID, label: CHOICE_ID): void { 
    if (!this.transitions[source]) { 
    this.transitions[source] = new Array() 
    } 
    this.transitions[source][label] = target 
} 

这应该测试导致您出现问题的情况。

希望有帮助;祝你好运!

+0

太棒了!谢谢 ! – carella