类型脚本 类型“字符串”不可分配给类型

2022-08-29 23:39:12

这是我在fruit.ts中拥有的内容

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

现在我正在将 fruit.ts 导入到另一个 typescript 文件中。这是我所拥有的

myString:string = "Banana";

myFruit:Fruit = myString;

当我这样做

myFruit = myString;

我收到一个错误:

类型“字符串”不能分配给类型“橙色”|“苹果”|“香蕉”'

如何将字符串分配给自定义类型的 Fruit 变量?


答案 1

更新

正如@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;

另请注意,使用字符串文本时,只需使用一个|


答案 2

Typescript 3.4 引入了新的“const”断言

您现在可以阻止文本类型(例如。 或)被“扩大”为使用所谓的断言键入。'orange''red'stringconst

您将能够执行以下操作:

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

然后它就不会再把自己变成一个 - 这是问题的根源。string

您也可以对整个对象执行此操作:

let animals = [ { species: 'dog' }, { species: 'cat' } ] as const;

type firstAnimal = (typeof animals)[0]['species'];  // string literal 'dog'

额外提示:还可以使用 或 来表示必须为 true 或 false 的布尔值。这有时在受歧视的工会中很有用。当你看到它时,你会知道它。<const> false<const> true