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:
- Imposibil de obținut valoarea proprietății 'block': obiectul este nul sau nedefinit;
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;
}
}
}
