Типов скрипт: Не може да се получи стойност на свойството 'block': обектът е нулев или недефиниран

Пиша код за валиден телефонен номер. Но когато компилирам проект, имам следните грешки:

  1. Не може да се получи стойност на свойството 'block': обектът е нулев или недефиниран;
  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;
            }
        }
    }
    

Какво мислите за? Имам нужда от помощ.

Намерих решение: Изтриване на „public“ в свойствата в методи: buildPhone и clearPhone.


person Pavel Druzhinin    schedule 18.10.2013    source източник


Отговори (2)


Не можете да декларирате параметри на член function като публични. Това е валидно само за конструктори, където се използва като съкращение за:

  • деклариране на членска променлива
  • също присвояване на входния параметър на членската променлива
person basarat    schedule 18.10.2013

Бързо подредих кода ви.

Когато използвате public или private в конструктор, можете да избегнете преобразуването от параметър към свойство на класа, тъй като компилаторът на TypeScript ще го направи автоматично вместо вас.

Параметрите на вашия метод не се нуждаят от тези модификатори за достъп - те не могат да бъдат public или private, тъй като са обхванати от функцията (т.е. те живеят само за продължителността на функцията и не могат да бъдат достъпни извън функцията).

Примерът по-долу трябва да се компилира добре.

// 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;
        }
    }
}
person Fenton    schedule 18.10.2013