gpt4 book ai didi

javascript - typescript 不强制类型

转载 作者:行者123 更新时间:2023-11-30 15:20:46 24 4
gpt4 key购买 nike

我有这个非常简单的代码:

let viewsDictionary: { [key: string]: Object } = {
abc: {}
};
type ViewName = keyof typeof viewsDictionary;

let result: ViewName;

result = "category";

TypeScript 版本 2.2.2 没有提示结果只能有值“abc”。为什么?

最佳答案

您明确地给 viewsDictionary 类型 { [key: string]: Object }。您分配兼容值的事实不会改变其类型,因此 typeof viewsDictionary 保持 { [key: string]: Object } keyof 是任何字符串。

你可以通过赋值来验证

viewsDictionary = { category: {} };

效果也不错。

只需删除显式类型声明,以便 TS 自行推断类型并将按预期工作:

let viewsDictionary = {
abc: {}
};
type ViewName = keyof typeof viewsDictionary;

let result: ViewName;

result = "category"; error

现在提示类型“category”不能分配给类型“abc”。

更新:

您也可以明确指定类型(来自评论):

let viewsDictionary: {abc: {}} = {
abc: {},
def: {}, // error
};
type ViewName = keyof typeof viewsDictionary;

let result: ViewName;

result = "def"; // still error

当您将另一个键添加到 type '{ abc: {}; 的 viewsDictionary 时,这会报错定义:{}; }' 不可分配给类型 '{ abc: {}; }'

关于javascript - typescript 不强制类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750641/

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