这是我使用教程创建的班级。我发现interface
的名称是as
。真的需要吗?该事件已被分配的目的是什么。
我的ts:
import { Component, OnInit } from '@angular/core'
import { ICurrentWeather } from '../interfaces'
@Component({
selector: 'app-current-weather',
templateUrl: './current-weather.component.html',
styleUrls: ['./current-weather.component.css'],
})
export class CurrentWeatherComponent implements OnInit {
current: ICurrentWeather /*already assigned*/
constructor() {
this.current = {
city: 'Bethesda',
country: 'US',
date: new Date(),
image: 'assets/img/sunny.png',
temperature: 72,
description: 'sunny',
} as ICurrentWeather /*is it required again?*/
}
ngOnInit() {}
}
对Icon天气的诽谤:
export interface ICurrentWeather {
city: string
country: string
date: Date
image: string
temperature: number
description: string
}
答案 0 :(得分:1)
不是,不是必需的,只是告诉编译器您比它更了解类型,并且它不应该再猜测您了。在您的代码中
current: ICurrentWeather
在这里,您声明一个类型为current
的变量
this.current = {
city: 'Bethesda',
country: 'US',
date: new Date(),
image: 'assets/img/sunny.png',
temperature: 72,
description: 'sunny',
} as ICurrentWeather
在这里,您正在将对象投射为其他类型,即{
城市:“贝塞斯达”,
国家:“美国”,
日期:new Date(),
图片:“ assets / img / sunny.png”,
温度:72,
描述:“晴天”,
}与current
变量类型相同,然后将其分配给current
。
检查打字稿类型断言HERE
答案 1 :(得分:0)
在您的情况下,您已经为对象'current'的所有属性分配了值,因此,无论是否使用'as ICurrentWeather',它都没有任何区别。
如果您不想为任何属性分配值,则需要“ as ICurrentWeather”类型转换,否则代码将无法编译。
让我们认为“描述”属性不是必需的。
this.current = {
city: 'Bethesda',
country: 'US',
date: new Date(),
image: 'assets/img/sunny.png',
temperature: 72
} as ICurrentWeather;
将起作用,但是
this.current = {
city: 'Bethesda',
country: 'US',
date: new Date(),
image: 'assets/img/sunny.png',
temperature: 72
};
将无法编译。请注意,对象中没有'description'属性。
如果您想使'description'属性为空,则可以将接口声明为
export interface ICurrentWeather {
city: string;
country: string;
date: Date;
image: string;
temperature: number;
description?: string;
}
请注意,“ description”属性已附加“?” 现在,下面的代码也将起作用,因为该对象的所有必需属性都分配了值。
this.current = {
city: 'Bethesda',
country: 'US',
date: new Date(),
image: 'assets/img/sunny.png',
temperature: 72
};
答案 2 :(得分:0)
简短的回答是否定的。 在这种情况下,用作类型转换。 在这种情况下,它不是必需的,因为您要提供接口的所有参数。 如果您没有提供,则需要使用“ as”将其强制转换为您的类型。 范例- 您的界面
export interface ICurrentWeather {
city: string
country: string
date: Date
image: string
temperature: number
description: string
}
您并没有提供所有值,可以将其转换为ICurrentWeather类型
current: ICurrentWeather
this.current = {} as ICurrentWeather