"'string' 的 TypeScript 类型不可分配给类型"

19 浏览
0 Comments

"'string' 的 TypeScript 类型不可分配给类型"

这是我在fruit.ts中写的内容:

export type Fruit = "Orange" | "Apple" | "Banana"

现在我在另一个typescript文件中导入了fruit.ts。以下是我的内容:

myString:string = "Banana";
myFruit:Fruit = myString;

当我执行以下代码时:

myFruit = myString;

我遇到了一个错误:

类型“string”不能分配给类型“\"Orange\" | \"Apple\" | \"Banana\"”

我该如何将字符串赋值给自定义类型Fruit的变量?

admin 更改状态以发布 2023年5月23日
0
0 Comments

Typescript 3.4 新增了新的 'const' 断言

现在你可以使用所谓的 const 断言来防止字面量类型(如 'orange''red')被“扩大”为类型 string

你可以这样做:

let fruit = 'orange' as const;  // or...
let fruit =  'orange';

这样它就不会再被转换为 string 了,这是该问题的根源所在。

你还可以对整个对象进行断言:

let animals = [ { species: 'dog' }, { species: 'cat' } ] as const;
type firstAnimal = (typeof animals)[0]['species'];  // string literal 'dog'

附加提示:你也可以使用 false true 来表示必须为 true 或 false 的布尔值。在一些情况下(如磨刀霍霍向猪羊)这可能很有用。你会在看到的时候知道它的用途。

0
0 Comments

更新

正如 @Simon_Weaver 的回答中提到的,自 TypeScript 版本 3.4 开始,可以断言为 const

let fruit = "Banana" as const;

旧的回答

你需要进行 类型转换

export type Fruit = "Orange" | "Apple" | "Banana";
let myString: string = "Banana";
let myFruit: Fruit = myString as Fruit;

另外注意,当使用 字符串字面量类型 时,需要只使用一个 |

0