繁体   English   中英

TypeScript 元素隐含一个“任何”

[英]TypeScript Element implicitly has an 'any'

我对 TypeScript 有一些问题。 我正在尝试将一些来自父组件的值转换为子组件。 Parent 发送的值可以是 EN、FR 或 NL,而我应该将这些值转换为数字,所以我这样做了:

const transform_translation = {
      'EN': 1,
      'FR': 2,
      'NL': 3
    };

但是当我尝试获得像transform_translation[props.language]这样的价值时,它说;

S7053:元素隐式具有“any”类型,因为“any”类型的表达式不能用于索引类型“{ EN: number; FR:数字; 荷兰:

道具:

props: {
    language: {
      type: String,
      default: ['EN', 'NL', 'FR'],
      required: true
    },
.
.
.
}

那我应该如何定义它们呢? 我第一次和 TS 一起工作。

数字; }'。

您应该告诉 ts 您传递的内容不仅是字符串,而且仅限于您拥有的语言的可用键:

const transform_translation = {
  EN: 1,
  FR: 2,
  NL: 3
};

// create type out of valid keys of object
type Language = keyof typeof transform_translation;

const getLanguageNum = (lang: Language) => transform_translation[lang];

console.log(getLanguageNum("EN")); // 1

我会像这样创建一个枚举或键入密钥。 然后在访问它时,您可以将密钥转换为如下类型

type ITransformTranslationKey = 'EN' | 'FR' | 'NL';
const transform_translation: Record<ITransformTranslationKey, number> = {
      'EN': 1,
      'FR': 2,
      'NL': 3
    };

const someVar: ITransformTranslationKey = 'E' + 'N'; // you can define the type here
transform_translation[someVar as ITransformTranslationKey] // or here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM