首页 > 解决方案 > 如何键入提示 getter 只允许 dict 键?

问题描述

我想知道如何使这个吸气剂更加类型安全:

VALUES = {
   '1': 'One',
   '2': 'Two',
   '3': 'Three'
}


def get(key : str) -> str:
    return VALUES[key]

而不是str我想要的类型keyof VALUEStype(VALUES[key])类型。

get('4')然后应该抛出一个无效类型警告,因为这个键不存在。不确定这是否可以使用 Python,因为我正确地生活在 TypeScript 仙境中......:-)

TypeScript 应该看起来像这样:

get<K extends keyof VALUES>(key : K): typeof K
{
    return VALUES[key];
}

标签: pythontype-hintingpython-typingkeyof

解决方案


一般情况下您不能这样做。但是,您可以在这种特殊情况下使用以下命令完成您想要的typing.Literal

import typing
def get(key: typing.Literal['1','2','3']) -> str:
    return VALUES[key]

推荐阅读