我有一个常量值:

const dataConst = 'constType'

我只想在某个接口中强制使用此值,但这是不可能的:

interface ExampleInterface {
data: dataConst
}

我试过了,似乎很管用,但我不知道这是不是最好的做法:

interface ExmapleInterface {
data: typeof dataConst
}

我试过了,也成功了,但我想知道我所做的是否是最好的做法.

推荐答案

我相信做这件事没有好坏之分.你的例子只是实现你想要的许多方法之一.

也许解释一下您的示例为什么有效将是有用的.

const dataConst = 'constType'将实际值赋给dataConst常量.你还没有为这个const显式地指定类型,所以类型是由TypeScript编译器推断的.它很聪明,所以它会分配一个"字符串文字",值为"constType".相反,如果你写类似于:let dataConst = 'constType'dataConst的类型将是一个简单的string,因为编译器知道这个值在future 可能会改变.

你不能使用

interface ExampleInterface {
  data: dataConst
}

因为这是一个类型定义,只有"类型"可以进入其中.在本例中,dataConst是实际值. 为了"检索"dataConst常量的类型,我们可以使用typeof.请记住,这是一个不同于Javascript的同名运算符.它只能在Typescript种类型的上下文中使用.

interface ExampleInterface {
  data: typeof dataConst
}

那么现在有了这样的解释,还有没有其他方法呢?是.例如:

基于value类型声明类型Value

const value = 'my-constant-value'
type Value = typeof value

interface Example {
  prop: Value
}

或使用字符串文字声明Value类型

type Value = 'my-constant-value'
const value: Value = 'my-constant-value'

interface Example {
  prop: Value
}

或者,如果您不需要实际的常量值并且只使用类型就足够了

type Value = 'my-constant-value'

interface Example {
  prop: Value
}

甚至是

interface Example {
  prop: 'my-constant-value'
}

Typescript相关问答推荐

如何修复VueJS中的val类型不能赋给函数

TypScript中的算法运算式

React-Native运行方法通过监听另一个状态来更新一个状态

如何使用泛型类型访问对象

使某些(嵌套)属性成为可选属性

对于合并对象中的可选属性(例如选项),类型推断可能是错误的

通过按键数组拾取对象的关键点

TypeScrip:强制使用动态密钥

TypeScrip错误:为循环中的对象属性赋值

有没有办法防止类型交集绕过联合类型限制?

是否有可能避免此泛型函数体中的类型断言?

如何按属性或数字数组汇总对象数组

将带有样式的Reaction组件导入到Pages文件夹时不起作用

自动通用回调

TS2739将接口类型变量赋值给具体变量

Typescript,如何在通过属性存在过滤后重新分配类型?

如何在本地存储中声明该类型?

如何从抽象类的静态方法创建子类的实例?

基于区分的联合键的回调参数缩小

为什么`map()`返回类型不能维护与输入相同数量的值?