Check this good answer on template syntax.
Also you will retrieve more details in Angular official docs
With your example, you could simply do :
<some-element class="first second">...</some-element>
Because in this example, you don't use the features of ngClass directive. Just set regular class via html attribute in this case.
But to invoke an Angular directive you should use square braces.
Then in this case :
<some-element [ngClass]="{'first': isFirst, 'second': isSecond}"></someElement>
NgClass directive will add first class name to some-element if local property isFirst is true, and same thing for second.
Each directive has a selector to be invoked by Angular template compiler.
In the case of NgClass, the selector is [ngClass].
Excerpt of source code :
@Directive({selector: '[ngClass]'})
export class NgClass implements DoCheck {
...
Check for more details these resources :
- Angular directives
- Angular code for NgClass