- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TypeScript 3.0 introduces a new type called
unknown
that does exactly that. Much likeany
, any value is assignable tounknown
; however, unlikeany
, you cannot access any properties on values with the typeunknown
, nor can you call/construct them. Furthermore, values of typeunknown
can only be assigned tounknown
orany
.As an example, swapping the above example to use
unknown
instead ofany
forces turns all usages of foo into an error:
let foo: unknown = 10;
// Since `foo` has type `unknown`, TypeScript
// errors on each of these usages.
foo.x.prop;
foo.y.prop;
foo.z.prop;
foo();
new foo();
upperCase(foo);
foo `hello world!`;
function upperCase(x: string) {
return x.toUpperCase();
}
我最近开始用 TypeScript 编写代码,这里是我的问题:
unknown
可以完全替代
any
.
any
在 TypeScript 中自动输入,但是当我们从头开始用纯 TypeScript 编写代码时,还有什么理由使用
any
输入而不是
unknown
从 3.0 版开始?
unknown
有什么区别和
generics
?
const A = <T>(value: T): T => value;
const A1 = (value: unknown) => value;
console.log(A<string>('Hello'), A<number>(100));
const B = <T, U>(t: T, u: U) => {
console.log(t);
console.log(u);
};
const B1 = (t: unknown, u: unknown) => {
console.log(t);
console.log(u);
};
B<string, number>('Hello', 100);
B<number, string>(100, 'Hello');
并假设参数
value: unknown
最初是绝对类型的,值的类型是确定的,所以在我看来没有理由通过
T
明确地。
最佳答案
关于你问题的第一部分,我可能会使用 unknown
而不是 any
在大多数情况下,最好在必要时使用明确的断言,以使程序员意识到某些事情不一定安全。 any
的一个大问题人们是否在不知不觉中将其分配给预期错误的类型变量或参数:
function foo() :any { return 1;}
let x:string = foo () ;
x.bold() // runtime error
function foo() : unknown { return 1;}
let x:string = foo () ; // compile time error we need to think about why we are doing this.
foo
的结果。成为字符串
const A = <T>(value: T): T => value;
const A1 = (value: unknown) => value;
// redundant and a lot of typing
console.log(A<string>('Hello'), A<number>(100));
// let the compiler do the work for us
console.log(A('Hello'), A(100))
A
例子 :
A('').bold() // ok return is the same as the parameter type
A1('').bold() //error return value is of type unknown
B
我们可以指定参数必须是相同类型的
const B = <T>(t: T, u: T) => {
console.log(t);
console.log(u);
};
const B1 = (t: unknown, u: unknown) => {
console.log(t);
console.log(u);
};
B('Hello', 100); //compile time error
B1(100, 'Hello'); //compiles
关于TypeScript 3.0 `unknown` 类型作为 `any` 或 `generics` 的替代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51569567/
这是我的代码 14 20 {"Confirm Email"} 21 在第 17 行我得到错误 Type '{ pathname: string; user: { em
这是我的代码 14 20 {"Confirm Email"} 21 在第 17 行我得到错误 Type '{ pathname: string; user: { em
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 8 年前。 为什么 KeyEvent.getKeyText(0).substrin
我正在尝试 Rust 的新 wasm32-unknown-unknown 目标,我在调用数学函数(例如 sin、cos、exp、atan2)时遇到问题。 cargo .toml: [package]
当我为 spring-boot 创建启动项目时,我在 pom 文件中收到此错误。这只是为了创建一个基本的 Spring Boot 项目 Project build error: Invalid pac
我已经订阅了我想要传输的数据。但不知何故它不起作用。我收到此错误: The property pipe is not available for type "OperatorFunction" 这是我
运行以下查询时。select * from surgerys where to_char(dt_surgery ,'DD-MM-YYYY' ) = to_char('12-02-2012','DD-M
我在运行存储过程时遇到以下异常: com.microsoft.sqlserver.jdbc.SQLServerException:不支持从 UNKNOWN 到 UNKNOWN 的转换。 过程定义如下:
我尝试运行以下代码。顺便说一句,我对 python 和 sklearn 都是新手。 import pandas as pd import numpy as np from sklearn.linear
我已经阅读了关于未知类型的官方文档,但我很难真正理解它是如何工作的。 人们可以在文档中读到:“在没有首先断言或缩小到更具体的类型之前,不允许对未知进行任何操作。” 但如果我有这个功能: const f
我正在尝试在Mac OS中设置Hadoop 2.6.0 我正在关注这篇文章: http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hado
配置 Nexus docker 注册表和代理“dockerhub-proxy”后,如下所述: https://help.sonatype.com/repomanager3/formats/docker
我收到此错误 - “ValueError:未知标签类型:'unknown'” 我已经在网上搜索但无法摆脱这个错误,顺便说一句,我是 python 的新手:) 我的数据有 5 行 22 列,最后一列是标
使用 SHA256 摘要标识符 拉取图像失败 最佳答案 不幸的是,这是 DockerHub 删除 Docker 1.9 守护进程的向后兼容性的副作用。当使用 Docker 1.10 推送图像时,较旧的
我是 postgresql 的新手,正在尝试使用全文搜索 to_tsvector但是我遇到了错误。 SQL 和错误 SELECT to_tsvector('english', 'The quick b
每当我这样做时 npm run watch ,第一次编译工作正常 - 但经过几次编译后,我最终会得到这个错误: 95% emitting unnamed compat pluginError: UNK
在一个新的 Angular 应用程序中,我收到以下错误:Error from chokidar : Error: UNKNOWN: unknown error, watch我已经删除并重新安装 nod
使用 Typescipt 4.x.x 我写了一些代码来实现其他语言 Elm/Rust/Haskell 中常用的 Maybe/Option 类型。 我想写一个可以接受映射类型的通用函数 type MyM
const submitted = useSelector((state) => state.post.submitted) 对于上面的状态。我得到错误: (参数)状态:未知对象的类型为“未知”。 这
我正在尝试将多架构 docker 镜像推送到 docker hub 并遇到错误(在 https://github.com/docker/distribution/issues/3100 处打开了 do
我是一名优秀的程序员,十分优秀!