我有一段TypeScript代码,我很难理解.我是TypeScript的新手.
export const TerminalWidgetOptions = Symbol("TerminalWidgetOptions");
export interface TerminalWidgetOptions {
endpoint: Endpoint.Options,
id: string,
caption: string,
label: string
destroyTermOnClose: boolean
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我上面的代码究竟发生了什么?我所理解的是,名字的接口TerminalWidgetOptions被创建,它迫使参数endpoint,id,caption,label和destroyTermOnClose在实施成一类.我虽然不太了解上述内容.所以,显然创建了一个常量,只能设置一次然后保持这种状态,对吧?但是这个常量怎么能和接口类型同名呢?任务Symbol("TerminalWidgetOptions");很明确.来自Symbol函数的内容被放入常量中.
这或多或少是正确的吗?
Tit*_*mir 10
您可以拥有同名的类型和变量。类型在编译时被擦除,而变量保留。由于类型和变量可以在不同的上下文中使用,因此两者之间没有名称冲突。唯一的例外是类,类名同时表示类型和构造函数,因此您不能重新声明同名变量,因为这会在运行时与构造函数冲突。
在 TypeScript 中,您可以为变量/常量、接口甚至命名空间使用相同的名称。
TypeScript 根据上下文理解您所指的内容。请记住,接口只是对编译器和程序员的类型提示,它们在代码编译时完全消失,因此生成的 JavaScript 代码中没有冲突。
当您所指的TerminalWidgetOptions内容不明确时,没有用例:
class Klass implements TerminalWidgetOptions { // interface
someFunction(TerminalWidgetOptions); // constant
let t = TerminalWidgetOptions; // constant
Run Code Online (Sandbox Code Playgroud)
事实上,当您定义一个类时,您正在做类似的事情。通过定义一个类,你既声明了一个类型又定义了一个值
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)
Run Code Online (Sandbox Code Playgroud)
区别?
所以,接口只是一种类型。变量只是一个值。类既是类型(定义该类的实例的接口)又是值(是构造该类型实例的函数)
希望这能让你更清楚一点
| 归档时间: |
|
| 查看次数: |
1158 次 |
| 最近记录: |