8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么当将对象类型与字符串相交时,TypeScript 不会显示“从不输入”错误?

SingleNegationElimination 3月前

240 0

我试图理解为什么当对象类型与字符串类型相交时,TypeScript 没有在错误消息中明确显示 never 类型。这是我的代码:type Test1 = { b: numb...

我试图理解为什么当对象类型与字符串类型相交时,TypeScript 没有在错误消息中明确显示 never 类型。这是我的代码:

type Test1 = {
    b: number;
    c: string;
} & string;

// Type '{ b: number; c: string; }' is not assignable to type 'Test1'.
// Type '{ b: number; c: string; }' is not assignable to type 'string'.
let test1: Test1 = {
    b: 1,
    c: 'c',
}

// Type 'string' is not assignable to type 'Test1'.
// Type 'string' is not assignable to type '{ b: number; c: string; }'.
let test1: Test1 = 'test1'

在上面的代码中,Test1 被定义为对象类型和字符串的交集。根据我的理解,这应该导致 never 类型,因为没有值可以同时是具有属性的对象 b c 字符串。

  1. 当尝试将一个对象分配给 test1 时,我得到:
Type '{ b: number; c: string; }' is not assignable to type 'Test1'.
Type '{ b: number; c: string; }' is not assignable to type 'string'.
  1. 当尝试将字符串分配给 test1 时,我得到:
Type 'string' is not assignable to type 'Test1'.
Type 'string' is not assignable to type '{ b: number; c: string; }'.

据我了解,这些应该表明 Test1 实际上是 never 类型,但 TypeScript 似乎没有在错误消息中提到 never。这是 TypeScript 中的错误,还是我在 TypeScript 处理此类交集的方式上遗漏了什么?

如能就此行为做出任何澄清,我们将不胜感激。谢谢!

帖子版权声明 1、本帖标题:为什么当将对象类型与字符串相交时,TypeScript 不会显示“从不输入”错误?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由SingleNegationElimination在本站《typescript》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我试图将项目从 Angular 14 更新到 18。当然,我是逐步从 14 更新到 15。然后从 15 更新到 16,再从 16 更新到 17,目前从 17 更新到 18。当从 16 更新到 17 时,我……

    我正在尝试将项目从 Angular 14 更新到 18。

    当然,我是在 14 岁到 15 岁之间逐渐练习的,然后从 15 岁到 16 岁,再从 16 岁到 17 岁,现在从 17 岁到 18 岁。

    从 16 更新到 17 时出现此错误

    Error: node_modules/@ngrx/effects/src/effect_creator.d.ts:42:101 - error TS2313: Type parameter 'OT' has a circular constraint.
    
    42 export declare function createEffect<C extends EffectConfig, DT extends DispatchType<C>, OT extends ObservableType<DT, OT>, R extends EffectResult<OT>>(source: () => R & ConditionallyDisallowActionCr
    eator<DT, R>, config?: Partial<C>): R & CreateEffectMetadata;
    

    经搜索,发现需要安装Typescript 5.3.3版本才能修复此错误。

    我修复了 Angular 17 版中的这个错误,一切正常

    切换到 Angular 18 时,错误重复出现

    但是 Angular 18 有一个问题,你需要有一个 Typescript 版本 >=5.4.0 <5.5.0。

    如果有人能帮助我,我会很高兴,提前谢谢

    我尝试安装不同版本的 Typescript,但无法修复错误

返回
作者最近主题: