Lew*_*eel 54 definition typescript
我已经四处寻找,但似乎无法找到答案,希望你能提供帮助.如何为图像添加枚举?这是我理想的,但我得到一个错误.
declare module 'Lib' {
export module Graphics {
export class Image {
enum State {}
static STATE_IDLE: State;
static STATE_LOADING: State;
static STATE_READY: State;
static STATE_ERROR: State;
constructor();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将状态移动到图形模块它可以工作,但现在状态属于图形...这是不正确的,它需要是图像的一部分.
有任何想法吗?谢谢
小智 36
我最近也碰到了这个问题.这就是我目前使用的解决方案:
// File: Image.ts
class Image
{
constructor()
{
this.state = Image.State.Idle;
}
state: Image.State;
}
module Image
{
export enum State
{
Idle,
Loading,
Ready,
Error
}
}
export = Image;
Run Code Online (Sandbox Code Playgroud)
然后在我正在使用该类及其枚举的地方:
import Image = require("Image");
let state = Image.State.Idle;
let image = new Image();
state = image.state;
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常(即使我不认为这是做这种事情的预期方式).
希望TypeScript中有一种方法可以这样做:
class Image
{
enum State
{
Idle,
Loading,
Ready,
Error
}
constructor()
{
this.state = State.Idle;
}
state: State;
}
export = Image;
Run Code Online (Sandbox Code Playgroud)
NSj*_*nas 35
我认为以下是对最高投票解决方案的改进:
export class Image
{
constructor ()
{
this.state = Image.State.Idle;
}
state: Image.State;
}
export namespace Image
{
export enum State
{
Idle,
Loading,
Ready,
Error
}
}
Run Code Online (Sandbox Code Playgroud)
优点是您可以利用命名导入:
import {Image} from './image';
let img = new Image()
img.state = Image.State.Error
Run Code Online (Sandbox Code Playgroud)
Maž*_*ius 25
program.ts:
enum Status {
Deleting,
Editing,
Existing,
New
}
export class Program {
static readonly Status = Status;
readonly Status = Program.Status;
title: string;
status: Status;
constructor(init?: Partial<Program>) {
Object.assign(this, init);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let program = new Program({ title: `some title` });
program.status = Program.Status.New;
Run Code Online (Sandbox Code Playgroud)
要么
program.status = program.Status.New;
Run Code Online (Sandbox Code Playgroud)
为Angular 2+用户增加了好处:这可以在模板中使用
<div *ngIf="program.status === program.Status.New">
Only display if status of the program is New
</div>
Run Code Online (Sandbox Code Playgroud)
我想我可能已经找到了一个解决方案......我不知道它是否是有效的 TypeScript,但它可以工作并且不会导致任何编译错误。这是上述答案的组合。
declare module 'Lib' {
module Graphics {
module Image {
enum State { }
var STATE_IDLE: State;
var STATE_LOADING: State;
var STATE_READY: State;
var STATE_ERROR: State;
}
class Image {
constructor();
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以发现我没有注意到的任何潜在问题吗?