首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于“未知”用法的TypeScript 3.0错误

关于“未知”用法的TypeScript 3.0错误
EN

Stack Overflow用户
提问于 2018-07-29 12:29:58
回答 1查看 14.5K关注 0票数 1

这里,我测试TypeScript3.0 unkown类型。

https://blogs.msdn.microsoft.com/typescript/2018/07/12/announcing-typescript-3-0-rc/#the-unknown-type

TypeScript 3.0引入了一种名为unknown的新类型,它正是这样做的。就像any一样,任何值都可以分配给unknown;但是,与any不同,您不能使用unknown类型访问值上的任何属性,也不能调用/构造它们。此外,unknown类型的值只能分配给unknownany

我处理了一些教会编码内容,并测试了函数的每个参数的unknown类型,我有一个错误如下:

代码语言:javascript
复制
const log = (m: unknown) => {
    console.log(m); //IO
    return m;
};

const I = (x:unknown) => x;
const L = (x:unknown) => (y:unknown) => x;
const P = (x:unknown) => (y:unknown) => (z:Function) => z(x)(y);
//z is a binary operator Function!

const Left = L;
const Right = L(I);

log("Left Right test---------");
log(
    Left("boy")("girl")  // boy
);
log(
    Right("boy")("girl")  //TypeScript Type Error here
);

错误:

代码语言:javascript
复制
church.ts:20:9 - error TS2571: Object is of type 'unknown'.

20         Right("boy")("girl")
           ~~~~~~~~~~~~

以防万一,这在普通的JS中得到了很好的测试,但是我只想知道如何在不使用any类型的情况下解决这个错误。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 15:00:12

这里非常简单,我认为您不应该使用unknown,而应该使用泛型函数,因为L的参数与最终的返回类型之间有明显的关系:

代码语言:javascript
复制
const I = (x:unknown) => x;
const L = <T>(x:T) => (y:unknown) => x;

const Left = L;
const Right = L(I); 

log("Left Right test---------");
log(
  Left("boy")("girl")  // boy
);
log(
  Right("boy")("girl")  //all ok 
);

当类型不仅在编写函数时未知(在编写函数时我们可以使用常规类型),而且在调用函数时(这是泛型类型参数时),我将使用unknown,就像使用any一样。

如果由于某种原因泛型是不可行的,那么唯一的解决方法是使用类型断言,因为您掌握的是类型系统在本例中丢失的信息:

代码语言:javascript
复制
(Right("boy") as ((x:unknown)=> unknown))("girl")  //all ok 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51580343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档