tsc - TypeScript: Nu se poate obține valoarea proprietății 'block': obiectul este nul sau nedefinit


Scriu cod pentru un număr de telefon valid. Dar când compilez proiectul am următoarele erori:

  1. Imposibil de obținut valoarea proprietății 'block': obiectul este nul sau nedefinit;
  2. iesire din comanda ""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"" cu codul 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;
            }
        }
    }
    

La ce te gândești? Am nevoie de ajutor.

Am găsit soluția: Ștergeți „public” în proprietăți în metodele: buildPhone și clearPhone.

Răspuns #1

Nu poți declara parametrii unei funcții membre ca publici. Aceasta este valabilă doar pentru constructori, unde este folosită ca un scurtătura pentru:

  • declararea unei variabile de membru
  • de asemenea atribuind parametrul de intrare variabilei membru

Răspunsul #2

Am făcut o mică ordine în codul tău.

Unde folosești public sau private într-un constructor, poți evita maparea de la parametrul la o proprietate a clasei deoarece compilatorul TypeScript o va face automat pentru tine.

Parametrii metodei tale nu au nevoie de acești modificatori de acces - ei nu pot fi public sau private deoarece sunt limitați la funcție (adică există doar pe durata funcției și nu pot fi accesați în afara funcției).

Exemplul de mai jos ar trebui să compileze fără probleme.

// 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;
        }
    }
}