打字稿:界面中的常量

时间:2014-10-20 17:15:13

标签: typescript

如何在接口中将常量放在打字稿中。就像在java中一样:

interface OlympicMedal {
  static final String GOLD = "Gold";
  static final String SILVER = "Silver";
  static final String BRONZE = "Bronze";
}

5 个答案:

答案 0 :(得分:20)

您无法在界面中声明值。

您可以在模块中声明值:

module OlympicMedal {
    export var GOLD = "Gold";
    export var SILVER = "Silver";
}

在即将发布的TypeScript版本中,您将可以使用const

module OlympicMedal {
    export const GOLD = "Gold";
    export const SILVER = "Silver";
}

OlympicMedal.GOLD = 'Bronze'; // Error

答案 1 :(得分:0)

有一个在接口中具有常量的解决方法:使用相同的名称定义模块和接口。

在下面,接口声明将与模块合并,以便OlympicMedal成为值,名称空间和类型。这可能就是您想要的。

module OlympicMedal {
    export const GOLD = "Gold";
    export const SILVER = "Silver";
}

interface OlympicMedal /* extends What_you_need */ {
    myMethod(input: any): any;
}

这适用于Typescript 2.x

答案 2 :(得分:0)

这似乎可行:

class Foo {
  static readonly FOO="bar"
}

export function foo(): string {
  return Foo.FOO
}

您也可以像这样拥有私有常量。看来接口虽然不能具有静态成员。

答案 3 :(得分:0)

只需使用界面中的值代替类型,请参见下文

export interface TypeX {
    "pk": "fixed"
}

let x1 : TypeX = {
    "pk":"fixed" // this is ok
}

let x2 : TypeX = {
    "pk":"something else" // error TS2322: Type '"something else"' is not assignable to type '"fixed"'.
}

答案 4 :(得分:0)

在接口as shown here中建立常量的一种推荐方法是执行以下操作:

export class Constants {
  public static readonly API_ENDPOINT = 'http://127.0.0.1:6666/api/';
  public static readonly COLORS = {
    GOLD: 'Gold',
    SILVER: 'Silver',
    BRONZE: 'Bronze'
  };
}

这是定义常量而又不被修改或disabling settings in the TSLinter的首选方法(因为模块和名称空间会通过linter发出许多警告)。