Javascript TypeScript类型断言不会因值不正确而失败

Javascript TypeScript类型断言不会因值不正确而失败,javascript,typescript,Javascript,Typescript,我们正在使用msal库,并试图将javaScript代码转换为TypeScript 下图表明TS正确地知道cacheLocation的预期类型。这可以是字符串localStorage、字符串sessionStorage或undefined。但是,当尝试将其与包含其中一个预期值的变量连接在一起时,失败: 使用以下语法可以解决此问题。这种情况下唯一的问题是错误的值不会被标记为不正确: 当阅读时,它说这是设计的,开发人员知道类型是正确的。但是,如果使用未知值,我确实希望TS会抛出错误 有更好的方法吗?

我们正在使用msal库,并试图将javaScript代码转换为TypeScript

下图表明TS正确地知道cacheLocation的预期类型。这可以是字符串localStorage、字符串sessionStorage或undefined。但是,当尝试将其与包含其中一个预期值的变量连接在一起时,失败:

使用以下语法可以解决此问题。这种情况下唯一的问题是错误的值不会被标记为不正确:

当阅读时,它说这是设计的,开发人员知道类型是正确的。但是,如果使用未知值,我确实希望TS会抛出错误

有更好的方法吗?还是仅仅是这样?抱歉,如果这是一个愚蠢的问题,我还在学习TS

代码

从'src/app config.json'导入*作为配置 从“msal”导入{Configuration,CacheLocation} 常量测试='ErrorValue' 导出函数MSALCONFIG工厂:配置{ 返回{ 认证:{ clientId:config.auth.clientId, 权限:config.auth.authority, 验证权限:正确, 重定向URI:config.auth.redirectUri, postLogoutRedirectUri:config.auth.postLogoutRedirectUri, navigateToLoginRequestUrl:对, }, 缓存:{ cacheLocation:测试为cacheLocation, storeAuthStateInCookie:错, }, } }
我认为这只是一个输入错误:在您的第一张图像中,您有LocalStorange,请注意额外的n

类型“localStorange”不可分配给类型“localStorage | sessionStorage | undefined”

斯托兰奇


TypeScript非常擅长捕捉简单的打字错误,但不太擅长告诉您到底是什么错误。

请您发布代码,而不是图片。在这种情况下,一行代码抵得上一千张图片:当然,代码添加您是正确的,在示例中,我使用了一个简单的字符串,但在我的实际应用中,我正在读取一个.json文件,其中包含config.cache.cacheLocation中的localStorage值,然后它失败了。啊,对不起,我误解了@TmTron的评论是正确的。您是正确的,在示例中,我使用了一个简单的字符串,但在我的实际应用程序中,我正在读取一个.json文件,该文件包含config.cache.cacheLocation中的localStorage值,然后失败。当数据不是硬编码的,而是来自外部源时,typescript无法验证它-typescript只能检查编译时已知的类型。因此,在您的情况下,您必须编写一些自定义代码来验证外部数据,如果可以的话,您可以将其转换为所需的类型。您可能想看看typescript验证库:例如,…编译时存在.json文件。那么它应该会发现它是对的?它并不是在抱怨同样是string.AFAIK类型的其他属性。这不起作用。JSON只知道几种类型:数字、字符串。。因此,无论从JSON文件导入什么,都将是:数字、字符串。。