TypeScript:冒号与等于(角度教程)

gee*_*ter 10 typescript angular

我正在学习Angular4并完成教程示例.

https://angular.io/docs/ts/latest/tutorial/toh-pt1.html

我在教程中有以下代码.

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `<h1>{{title}}</h1><h2>{{hero.name}} details!</h2>`
})
export class AppComponent { 
    title = 'Tour of Heroes'; // *1
      hero: Hero = {
      id: 1,
      name: 'Windstorm'
    };
  }

export class Hero {
  id: number; // *2
  name: string;
}
Run Code Online (Sandbox Code Playgroud)

在代码中定义了2个类,AppComponent和Hero.我无法理解为什么对于类的成员声明,​​AppComponent遵循样式property = value而类Hero使用style 属性:value

如果我将类AppComponent更改为以下,代码将无法按预期方式工作.

export class AppComponent { 
    title : 'Tour of Heroes', 
      hero: Hero : {
      id: 1,
      name: 'Windstorm'
    };
  }
Run Code Online (Sandbox Code Playgroud)

我想知道使用:和使用之间的区别=以及何时应该使用什么?

jon*_*rpe 21

再看看AppComponent:

export class AppComponent { 
  title = 'Tour of Heroes';
  hero: Hero = {
    id: 1,
    name: 'Windstorm'
  };
}
Run Code Online (Sandbox Code Playgroud)

第一个字段定义:

title = 'Tour of Heroes';
Run Code Online (Sandbox Code Playgroud)

正在分配一个字符串值.因为该值是一个字符串,TS可以推断出类型.这条线相当于:

title: string = 'Tour of Heroes';
Run Code Online (Sandbox Code Playgroud)

第二个字段定义

hero: Hero = {
  id: 1,
  name: 'Windstorm'
};
Run Code Online (Sandbox Code Playgroud)

正在分配一个可能是类型的对象any.所以在这里,为了充分利用TS,我们应该具体说明它将会是什么样的东西.它也可以写成:

hero = {...} as Hero;
Run Code Online (Sandbox Code Playgroud)

或者您可以内联定义而不是命名它:

hero: { id: number, name: string } = {...};
Run Code Online (Sandbox Code Playgroud)

Hero类中,您设置类型,没有默认值.两种模式实际上是相同的:

name[: type][ = value];
Run Code Online (Sandbox Code Playgroud)

有关类型和类定义的更多信息,可能值得查看TS手册.


eko*_*eko 6

:在 JSON 中用于值,例如:

{ name: "name value" };
Run Code Online (Sandbox Code Playgroud)

:也用于打字稿中定义对象类型。例如:

myObj: JSON;
Run Code Online (Sandbox Code Playgroud)

=用于在 JSON 之外进行赋值。

myObj: JSON = { name: "name value" }; // meaning myObj has type JSON and is equal to { name: "name value" };
Run Code Online (Sandbox Code Playgroud)

您的代码中的问题:

title : 'Tour of Heroes',  <-- Here you are making titles **type** 'Tour of Heroes'
Run Code Online (Sandbox Code Playgroud)

我建议您阅读 typescript 的基本文档:https://www.typescriptlang.org/docs/handbook/basic-types.html

  • @JamaicaGeek是的,因为您将“title”的类型定义为“string”,然后尝试将“string”的类型定义为“Tour of Heroes”,它应该是“title: string = 'Tour of Heroes'” `。这意味着“title”的类型是“string”,我将其指定为“Tour of Heroes”。 (3认同)