javascript - Typescript:使用接口(interface)从对象生成类型

标签 javascript typescript

这是 my question 的第二部分被问到here 。我得到了上一个问题的解决方案的帮助,但是一旦我添加了 alphabet 对象的接口(interface),Typescript 就停止检测我提供了不正确的值。


interface ICharMap {
    lower: number
    upper: number
}

const alphabet: {[key: string]: ICharMap} = {
    'a': {lower: 97, upper: 65},
    'b': {lower: 98, upper: 66}
}

type Char = keyof typeof alphabet;

function printSome(char: Char){
    console.log(char)
}

printSome('c') \\ Typescript does not detect that the incorrect value is passed.

最佳答案

你可以这样做:

interface ICharMap {
  lower: number
  upper: number
}

type Letter = 'a' | 'b'

const alphabet: Record<Letter, ICharMap> = {
  'a': {lower: 97, upper: 65},
  'b': {lower: 98, upper: 66}
}

function printSome(char: Letter){
  console.log(char);
  console.log(alphabet[char]); // no error; TS knows that char is in alphabet
}

printSome('c') // error

关于javascript - Typescript:使用接口(interface)从对象生成类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71136635/

相关文章:

JavaScript 侧边栏滑动菜单

javascript - 标记 onclick 被处理两次

javascript - 如何在 jQuery 中使用 handsontable 设置特定单元格的属性?

javascript - Typescript 使用 "as"从对象中删除其他属性?

Angular Jest 旁观者在测试另一个服务时模拟服务依赖性

php - 如何知道客户端启用了javascript?

javascript - 如何使用 Google Doubleclick API 检查特定插槽是否已加载?

javascript - 为什么 splice 方法不起作用并在 TypeScript 中删除数组上的项目

typescript - 我可以将 TypeScript 类从我自己的模块导入到全局吗?

javascript - RxJs Observable 并行发出请求,直到失败