我有一段TypeScript代码,我很难理解。我是TypeScript的新手。
export const TerminalWidgetOptions = Symbol("TerminalWidgetOptions");
export interface TerminalWidgetOptions {
endpoint: Endpoint.Options,
id: string,
caption: string,
label: string
destroyTermOnClose: boolean
}
有人能告诉我上面的代码究竟发生了什么?我理解的是,创建了名为TerminalWidgetOptions
的界面,它强制参数endpoint
,id
,caption
,label
和{{1实现到一个类。我虽然不太了解上述内容。所以,显然创建了一个常量,只能设置一次然后保持这种状态,对吧?但是这个常量怎么能和接口类型同名呢? destroyTermOnClose
的分配很明确。来自Symbol函数的内容被放入常量。
这或多或少是正确的吗?
答案 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)
区别?
因此,界面只是一种类型。变量只是一个值。类既是类型(定义该类的实例的接口)又是值(是构造该类型实例的函数)
希望这会让你更清楚