ts 类型转换 as number 为何还是string?

关于ts as number 依旧是string 的问题

const props = defineProps<{group: number }>()

getDictGroup(props.group)

export const getDictGroup = async (sid: number) => {
  const dict = await getDict()
  console.info(typeof sid)
  sid = sid as number
  console.info(typeof (sid))
  console.info(typeof (sid as number))
}

我这里代码已经在每一个步骤已经声明了是 number 但是依旧打印出来时是string

但是如果我使用 parseInt(sid) 又会提示我number 类型的参数不能赋值于 string

所以 类型转换是怎么转换的呢

ts 正确的类型转换

阅读 1k
avatarAI BotBETA

在 TypeScript 中,类型转换是通过使用 as 关键字来完成的。在你的代码中,你试图将 sid 转换为 number 类型,但是你遇到了问题,即使进行了类型转换,sid 的类型仍然被视为 string

首先,需要明确的是,TypeScript 的类型转换并不会改变变量的实际值或其在内存中的表示。它只是一种告诉 TypeScript 编译器变量应该被视为什么类型的机制。因此,即使你使用了 as 关键字,sid 的实际值仍然是 string 类型的。

在你的情况下,你可能需要在使用 sid 之前将其转换为 number 类型。你可以使用 parseInt()Number() 函数来完成这个操作。这两个函数都可以将字符串转换为数字,但它们的行为略有不同。

下面是你可以尝试的代码示例:

const props = defineProps<{group: number }>()

getDictGroup(props.group)

export const getDictGroup = async (sid: string) => {
  const dict = await getDict()
  console.info(typeof sid)
  sid = Number(sid) // 使用 Number() 函数进行转换
  console.info(typeof (sid))
  console.info(typeof (sid as number))
}

在这个示例中,我假设 props.group 的类型是 string,这是因为你提到即使你使用了 as 关键字,sid 的类型仍然被视为 string。如果你的意图是将 sid 的类型视为 number,那么你可能需要更改函数的参数类型或函数的实现方式。

2 个回答
✓ 已被采纳

ts 的类型转换 as 是骗编译器的,不会真的在运行时进行类型转换

你要类型转换应该这么写:

let n = 12345
n = String(n)
console.log(n) // "12345"

我大概知道问题了,是

// 这里是string
<DictCom group="1"></DictCom>

// 这里是number
<DictCom :group="1"></DictCom>

这个ts 它不会自动转换下 as number 失败 赋值为 0 怎么写呢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏