【问题标题】:I want to know why I get type errors in Typescript我想知道为什么我在 Typescript 中出现类型错误
【发布时间】:2023-02-01 07:32:23
【问题描述】:

我想知道为什么会发生错误,而不是如何消除错误。 我知道我可以使用 as 语法来消除错误。

请告诉我为什么会发生错误。 我的理解是变量 v2 和 v3 都不应该有任何会阻止类型识别的元素。 变量 v2 肯定是一个 PROMISE 字符串类型的变量。 变量 v3 绝对是类 Hoge2 的一个实例。 请告诉我为什么会出现错误,因为我想学习打字稿!

https://www.typescriptlang.org/play?ts=4.9.4#code/IYZwngdgxgBAZgV2gFwJYHsI2QUxMgCgEoYBvAWACgYYAbHZGANwEYAuGfAJ1QgHMYAHxgQEtWjAC8IsbQDcVGgHcAFqnowCyLghwkK1GkaiZ8zAExSYwJcFSMV6PjgKsiCw0ZgmIZpgGYrCBwlGAAJJxxzV3N3RS9mFisAgDoABy50NI8aAF8qfMpQSFhEFAwsR2cCAH0Obl4BYVFxIgMaLgYELiwAIl6PQqhaUBBwyPN271NtBChkdC4CDNQmYFwYTuAAE0xaMBg64AgwNsKaZ0YMrOIpjq6emH6cmELcoA

async function test() {
  let v1: string | null = null;
  while (true) {
      const v2 = await hoge(v1);
      const v3 = new Hoge2(v2);
      v1 = v3.prop;
  }
}
async function hoge(_: string | null){
  return "";
}
class Hoge2{
  constructor(private readonly _:any){}
  get prop(){
    return "";
  }
}

'v2' 隐式具有类型 'any' 因为它没有类型注释并且在其自己的初始化程序中直接或间接引用

'v3' 隐式具有类型 'any' 因为它没有类型注释并且在其自己的初始化程序中直接或间接引用。

【问题讨论】:

标签: typescript


【解决方案1】:

为 v3 定义一个类型,例如

type V3={
    prop: string      
}

然后改变这一行

const v3 = new Hoge2(v2);
to
const v3:V3 = new Hoge2(v2);

【讨论】:

  • 我知道如何修改脚本来解决问题。我想知道此错误是否是技术打字稿约定中发生的错误的误报,或者它是否是由我不知道的 javascript/打字稿约定引起的正确错误。
【解决方案2】:

一方面,v1 的类型是null(初始化值),另一方面它的类型是stringv1 = v3.prop赋值)。这造成了 Typescript 似乎无法处理的循环,尽管在纸面上没有类型冲突。

实际上,如果您不使用具体值初始化 v1,错误就会消失:

async function test() {
  let v1: string | null | undefined;
  while (true) {
      const v2 = await hoge(v1);
      const v3 = new Hoge2(v2);
      v1 = v3.prop;
  }
}
async function hoge(_?: string | null){
  return "";
}
class Hoge2{
  constructor(private readonly _:any){}
  get prop(){
    return "";
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多