typescript 的编译选项中 如何 禁止 类型 自动转换

2019-09-16 14:38:55 +08:00
 ruandao

譬如

type UserId = string;

然后 要求 UserId 和 string 是两种不同的类型,需要手动转换才行

项目是 react, 有个配置文件 tsconfig.json, 里面已经开启了 "alwaysStrict": true

但是好像没效果

3032 次点击
所在节点    JavaScript
8 条回复
Austaras
2019-09-16 14:49:11 +08:00
没有办法, typescript 是 structural typing,只要签名对的就是一个东西
另外要开严格模式是设置 strict, alwaysStrict 是总是生成 use strict 的 js
blindie
2019-09-16 15:04:56 +08:00
啥意思? type UserId = string 意思就是 UserId 是 string 的 alias。本来就是同一个东西 又要要求 UserId 和 string 是两种不同类型????那就不要用 type a = b
noe132
2019-09-16 15:06:55 +08:00
type 只是 alias。
如果你要区分 UserId 和 string,建议给 userId 添加一个包装对象
maomaomao001
2019-09-16 15:41:29 +08:00
类似这种吧,完全没有任何关系的两个类,只要结构能兼容,就可以互相赋值。这个应该是没有办法的

```

class C1 {
cc = 100
}

class C2 {
cc = 123
}

let xx:C1;

xx = new C2(); //多么希望这里报错!!!!



```
banxi1988
2019-09-16 17:10:11 +08:00
哈哈,楼主估计是从 Go 过来的. Go 里面 type 这样操作一下是两种类型了.
但是在 TypeScript 中这样不行. 这相当于 C 里面的 typedef. 不会报错的,因为没有定义一种新类型.
momocraft
2019-09-16 17:16:24 +08:00
momocraft
2019-09-16 17:17:47 +08:00
#6 的回答也适合#4, 总之就是假装类型里有些不 structural compatible 的东西
kingwl
2019-09-16 17:18:27 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX