TypeScript变量名称作为接口类型?

时间:2018-04-12 13:42:07

标签: typescript

我有一段TypeScript代码,我很难理解。我是TypeScript的新手。

export const TerminalWidgetOptions = Symbol("TerminalWidgetOptions");
export interface TerminalWidgetOptions {
    endpoint: Endpoint.Options,
    id: string,
    caption: string,
    label: string
    destroyTermOnClose: boolean
}

有人能告诉我上面的代码究竟发生了什么?我理解的是,创建了名为TerminalWidgetOptions的界面,它强制参数endpointidcaptionlabel和{{1实现到一个类。我虽然不太了解上述内容。所以,显然创建了一个常量,只能设置一次然后保持这种状态,对吧?但是这个常量怎么能和接口类型同名呢? destroyTermOnClose的分配很明确。来自Symbol函数的内容被放入常量。

这或多或少是正确的吗?

2 个答案:

答案 0 :(得分:4)

您可以拥有同名的类型和变量。类型在编译时被擦除,而变量仍然存在。由于类型和变量可以在不同的上下文中使用,因此两者之间没有名称冲突。唯一的例外是类,其类名表示类型和构造函数,因此您无法重新声明与运行时与构造函数冲突的名称相同的变量。

答案 1 :(得分:2)

在TypeScript中,您可以为变量/常量,接口甚至名称空间使用相同的名称。

TypeScript根据上下文了解您所指的内容。请记住,接口只是编译器和程序员的类型提示,它们在编译代码时完全消失,因此生成的JavaScript代码中没有冲突。

当您TerminalWidgetOptions引用的内容含糊不清时,没有用例:

class Klass implements TerminalWidgetOptions { // interface

someFunction(TerminalWidgetOptions); // constant

let t = TerminalWidgetOptions; // constant

事实上,当你定义一个类时,你会做类似的事情。通过定义一个类,您既可以声明类型又可以定义值

const d = Klass; // d now is like the constructor of Klass (a value, something that exists)
doSomething<Klass>(); // Here, Klass is a pure type (an abstraction)

区别?

  • 类型表示&#39;形状&#39;功能对象。
  • 价值是物理上存在的东西。在程序(一个对象)

因此,界面只是一种类型。变量只是一个值。类既是类型(定义该类的实例的接口)又是值(是构造该类型实例的函数)

希望这会让你更清楚