Typescript - Как здесь создается экземпляр класса, пожалуйста?

У меня есть код здесь. Моя проблема в том, что мне не удается понять, как создается экземпляр. Почему мы используем «: калькулятор» (строка 3) после «нового калькулятора» (строка 4). Есть разница ? Я знаю, что у меня проблема с Typescript, но я нашел этот фрагмент кода, когда искал тесты в Angular. Также я искал в некоторых учебниках, но не нашел объяснения.

import { Calculator } from './calculator';
​
describe('Calculator', () => {

    let calculator: Calculator;

    beforeEach(() => {
        calculator = new Calculator();
    });
​
});

🤔 А знаете ли вы, что...
Angular Material - это набор готовых компонентов и стилей для создания стильных веб-приложений с использованием Angular.


56
4

Ответы:

Ваш файл «calculator.ts», вероятно, имеет что-то вроде:

export class Calculator {
    ...
}

Когда вы делаете import { Calculator } from './calculator';, вы импортируете класс Calculator в свой текущий файл.

let calculator: Calculator; объявит переменную calculator присвоив ей тип Calculator <- Так вы конкретно говорите, что у вас будут Calculator объекты в этой переменной. Это для понимания машинописных текстов и завершения кода,

Это создаст новый экземпляр класса.

 calculator = new Calculator(); 

Решено

Короче говоря, вы используете: Калькулятор для дать тип этой переменной, с другой стороны, она объявлена ​​за пределами сферы действия перед каждым, поэтому она может быть доступна в тестах.

Если бы ты сделал

beforeEach(() => {
    let calculator = new Calculator();
});

калькулятор будет недоступен.


import { Calculator } from './calculator'; // importing Calculator class
​
describe('Calculator', () => { // Describing feature in BDD manner

    let calculator: Calculator; 
    // Declaring variable calculator so it's accessible within whole describe() block

    beforeEach(() => { // This hook will be called before each test in your feature
        calculator = new Calculator(); 
        // and therefore will create new instance of a Calculator for each test
    });

    // Here you probably will see something like

    it('should return sum of 2 numbers', () => {
        const result = calculator.add(2,3); // actual instance used
        expect(result).toEqual(5);
    });
​
});

Строка 3 означает объявление типа вашей переменной, но сначала она не определена, поэтому вам нужно создать новый экземпляр вашего типа, поэтому в следующей строке это делает new Calculator().