Typescript:无法获取属性'block'的值:object为null或undefined

时间:2013-10-18 08:56:18

标签: typescript tsc

我为有效的电话号码编写代码。但是当我编译项目时,我有以下错误:

  1. 无法获取属性'block'的值:object为null或undefined;
  2. 从命令输出“”C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript \ tsc“”C:.. \ Scripts \ MyScripts \ TS \ BuildPhone.ts“”C:.. \ Scripts \ MyScripts \ TS \ ProductsViewModel.ts“”C:.. \ Scripts \ MyScripts \ TS \ helloWorld.ts“”代码为1。

    // Interface
    interface IPhoneBuild
    {
        showPhone(): string;
        checkPhone(): boolean;
    }
    
    class Phone
    {
        Code: string;
        Number: string;
        Fax: boolean;
    }
    
    // Module
    module Phones
    {
        // Class
        export class PhoneBuild implements IPhoneBuild
        {
            private phone: Phone;
            private codes: string[];
    
            // Constructor
            constructor(public Number: string, public Code: string, public Codes: string[])
            {
                this.phone = this.buildPhone(Number, Code);
                this.codes = Codes;
            }
    
            //Private Methods
            private clearPhone(public reg: string)
            {
                var re = /\W/g;
                return reg.replace(re, "");
            }
    
            private buildPhone(public num: string, public code: string)
            {
                var p: Phone = { Code: "", Number: "", Fax: false };
    
                num = this.clearPhone(num);
    
                if (num.length == 6)
                {
                    p = { Code: code, Fax: false, Number: num };
                }
    
                if (num.length == 11)
                {
                    p = { Code: num.substring(0, 4), Fax: false, Number: num.substring(4)};
                }
    
                return p;
            }
    
            // Instance member
            public showPhone()
            {
                return this.phone.Code + this.phone.Number;
            }
    
            public checkPhone()
            {
                return this.phone.Number.length != 7 || this.phone.Code.length == 0;
            }
        }
    }
    
  3. 你怎么看?我需要帮助。

    我找到了解决方法:在方法中的属性中删除“public”:buildPhone和clearPhone。

2 个答案:

答案 0 :(得分:2)

您不能将成员function的参数声明为公开。这仅适用于构造函数,它用作以下的简写:

  • 声明成员变量
  • 还将输入参数分配给成员变量

答案 1 :(得分:1)

我已经快速整理了你的代码。

如果在构造函数中使用publicprivate,则可以避免从参数到类的属性的映射,因为TypeScript编译器会自动为您执行此操作。

您的方法参数不需要这些访问修饰符 - 它们不能是publicprivate,因为它们是作用于函数的范围(即它们仅在函数的持续时间内存在且不能在功能之外访问。)

以下示例应该可以正常编译。

// Interface
interface IPhoneBuild
{
    showPhone(): string;
    checkPhone(): boolean;
}

class Phone
{
    Code: string;
    Number: string;
    Fax: boolean;
}

// Module
module Phones
{
    // Class
    export class PhoneBuild implements IPhoneBuild
    {
        private phone: Phone;

        // Constructor
        constructor(phoneNumber: string, code: string, public codes: string[])
        {
            this.phone = this.buildPhone(phoneNumber, code);
        }

        //Private Methods
        private clearPhone(reg: string)
        {
            var re = /\W/g;
            return reg.replace(re, "");
        }

        private buildPhone(num: string, code: string)
        {
            var phone: Phone = { Code: "", Number: "", Fax: false };

            num = this.clearPhone(num);

            if (num.length == 6)
            {
                phone.Code = code;
                phone.Number = num;
            }

            if (num.length == 11)
            {
                phone.Code = num.substring(0, 4);
                phone.Number = num.substring(4);
            }

            return phone;
        }

        // Instance member
        public showPhone()
        {
            return this.phone.Code + this.phone.Number;
        }

        public checkPhone()
        {
            return this.phone.Number.length != 7 || this.phone.Code.length == 0;
        }
    }
}