Typescript 如何在.tsx文件中强制转换?

Typescript 如何在.tsx文件中强制转换?,typescript,react-native,react-tsx,Typescript,React Native,React Tsx,我在一个.tsx文件中写了一些代码,我需要强制转换一个变量,但它不起作用,我不明白为什么 这是我的代码: let a : number = 2; let b : string = a as unknown as string; console.log("b type = "+typeof(b)) 这就是结果: b type = number 我想这是因为我先将其转换为未知,然后转换为字符串,我不知道为什么有必要这样做,但如果我只写:让b:string=a作为字符串,我得到

我在一个.tsx文件中写了一些代码,我需要强制转换一个变量,但它不起作用,我不明白为什么

这是我的代码:

let a : number = 2;
let b : string = a as unknown as string;
console.log("b type = "+typeof(b))
这就是结果:

b type = number
我想这是因为我先将其转换为未知,然后转换为字符串,我不知道为什么有必要这样做,但如果我只写:
让b:string=a作为字符串,我得到以下错误:

ERROR in App.tsx(59,22)
  TS2352: Conversion of type 'number' to type 'string' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.

那么有人知道如何在.tsx文件中强制转换吗?(不可能用于类型转换,否则它会被视为React元素)

如果您熟悉强类型语言中的类型转换,您可能会误解字符串的作用。请记住,typescript只在编译时存在,而不是在运行时。所以
由于string
在运行时不会对数据进行任何更改,它只会影响编译时的评估方式
as string
是一种告诉typescript“我比你知道得多,所以不要检查这里的类型。假装它是字符串,即使所有证据都说它是其他东西”

使用类型断言有时是必要的,但只有在您确实知道typescript不知道的事情时才应该使用它。你之所以会出现这个错误,是因为它显然不是字符串,所以typescript增加了一个额外的层,说“你真的确定不想让我检查你的类型吗?”。将
添加为未知
表示“是的,确实不检查我的类型”

如果你想把它从一个数字变成一个字符串,不要使用类型断言;编写代码将其更改为其他类型:

let b : string = a.toString();
// or
let b : string = '' + a;

这就是在.tsx文件中强制转换(实际上)的方式——“当将TypeScript与JSX一起使用时,只允许作为样式断言”<由于
a
显然不是字符串,因此在没有通过
unknown
进行断言的情况下,code>a as string
将失败。您正在分配一个数字,但告诉编译器它将获得一个字符串,所有类型等都将在编译期间删除,请使用
a.toString()
string(a)
谢谢,我已经习惯了弱类型语言,所以我现在在类型转换方面遇到了一些困难。我认为它能够直接翻译字符串“2”中的数字2,而无需使用toString()。