打字稿类型“字符串”不可分配给类型

新手上路,请多包涵

这是我在fruit.ts中的内容

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

现在我在另一个打字稿文件中导入fruit.ts。这就是我所拥有的

myString:string = "Banana";

myFruit:Fruit = myString;

当我做

myFruit = myString;

我收到一个错误:

类型“字符串”不可分配给类型“橙色”| “苹果” |

“香蕉”’

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

原文由 user6123723 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 970
2 个回答

更新

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

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

原文由 Nitzan Tomer 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

You can now prevent literal types (eg. 'orange' or 'red' ) being ‘widened’ to type string with a so-called const 断言。

您将能够:

 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'

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

原文由 Simon_Weaver 发布,翻译遵循 CC BY-SA 4.0 许可协议

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