我正在尝试找出静态字段与方法行为之间的区别,该类型与打字稿和angular中的类有关。帮助将非常有必要:)
我在app src中导出了带有静态字段和方法的类, 当我导入它并尝试使用静态字段时,如果我调用静态方法,它们将是未定义的。
src / app / core / colors.ts
export class SystemColors {
static _gray: {
default: '#ABAFBE',
darker: ['#7C8298', '#606473'],
lighter: ['#C8D1DA', '#E2E3ED', '#F5F6FA']
};
public static get gray() {
return {
default: '#ABAFBE',
darker: ['#7C8298', '#606473'],
lighter: ['#C8D1DA', '#E2E3ED', '#F5F6FA']
};
}
}
src / app / app.component.ts
import {SystemColors} from '...';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, AfterViewInit {
constructor() {}
ngOnInit() {
console.log(1, SystemColors.gray); // static get method has value
console.log(2, SystemColors._gray); // static field undefined :(
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
存在语法问题。在类中使用return [RCTLinkingManager application:application openURL:url options:options]
为属性分配值。
尝试一下:
return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:nil]
这是您推荐的Working Sample StackBlitz。
答案 2 :(得分:0)
static _gray: {
default: '#ABAFBE',
darker: ['#7C8298', '#606473'],
lighter: ['#C8D1DA', '#E2E3ED', '#F5F6FA']
};
这意味着“该类具有名为_gray的静态属性,其类型为[在此处插入对象]”。实际上,实际上没有给它赋值,只是一个类型。由于在编译时会删除类型信息,因此所有这些都将消失。相反,您想使用等号而不是冒号来做到这一点:
static _gray = {
default: '#ABAFBE',
darker: ['#7C8298', '#606473'],
lighter: ['#C8D1DA', '#E2E3ED', '#F5F6FA']
};
使用此修改后的代码,您将为其分配一个实际的对象,而不仅仅是定义类型。将代码转换为javascript后,仍然会进行对象的创建和分配。