gpt4 book ai didi

typescript - 如何创建每个值的类型取决于键的查找?

转载 作者:行者123 更新时间:2023-12-05 06:59:34 24 4
gpt4 key购买 nike

我正在尝试创建一个查找,其中每个键都确定相应值的类型。

考虑这段代码:

type Language =  'en' | 'de';

// Language-specific parser
type Parser<TLanguage extends Language> = (text: string, language: TLanguage) => any;

// Lookup that contains a typed parser for each language
const parsers: { [language in Language]: Parser<language> } = {
'de': () => null, // Dummy values
'en': () => null,
};

想法是对于每种Languageparsers 都包含一个特定于语言的解析器针对该特定语言强类型化

此作业按预期工作:

const englishParser: Parser<'en'> = parsers.en;

但是这个作业不起作用,我也想不通为什么。我的目标是编写没有类型断言的类型安全代码。

function test<TLanguage extends Language>(language: TLanguage) {
// Error:
// Type '{ en: Parser<"en">; de: Parser<"de">; }[TLanguage]' is not assignable
// to type 'Parser<TLanguage>'.
const parser: Parser<TLanguage> = parsers[language]; //
}

这是 a TypeScript Playground link that demonstrates the problem .

最佳答案

你需要一个类型转换:

function test<TLanguage extends Language>(language: TLanguage) {
const parser: Parser<TLanguage> = parsers[language] as Parser<TLanguage>;
}

Playground Link

关于typescript - 如何创建每个值的类型取决于键的查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64385096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com