我将JS项目转换为TS,这里我有这个错误(使用urql):
声明类型既不是“void”也不是“any”的函数必须返回值。ts(2355)
在线:
结果,参数,缓存
为什么?
const updates = {
Mutation: {
playerCreate: (result, args, cache): UpdateResolver => {
const playersQueries = cache
.inspectFields("Query")
.filter((x) => x.fieldName === "players");
playersQueries.forEach(({ fieldName, arguments: variables }) =>
cache.invalidate("Query", fieldName, variables)
);
},
playerDelete: (result, args, cache, info): UpdateResolver => {
// using result, args, cache here
},
},
};
我可以看到Updateresolver
是这样声明的:
export declare type UpdateResolver = (result: Data, args: Variables, cache: Cache, info: ResolveInfo) => void;
更新:
有人正确地告诉我,我是说这个函数返回一个UpdateResolver
,而类型是函数的,而不是返回类型。
因此问题是:
我怎样才能正确地在这里键入player创建
和playerDelete
?
尝试将代码更改为:
const updates = {
Mutation: {
playerCreate: (result: Data, args: Variables, cache: Cache): void => {
const playersQueries = cache
.inspectFields("Query")
.filter((x) => x.fieldName === "players");
playersQueries.forEach(({ fieldName, arguments: variables }) =>
cache.invalidate("Query", fieldName, variables)
);
},
playerDelete: (result: Data, args: Variables, cache: Cache, info: ResolveInfo): void => {
// using result, args, cache here
},
},
};
编辑:我发现使用作为
运算符实际上是可能的:
const updates = {
Mutation: {
playerCreate: (((result, args, cache) => {
const playersQueries = cache
.inspectFields("Query")
.filter((x) => x.fieldName === "players");
playersQueries.forEach(({ fieldName, arguments: variables }) =>
cache.invalidate("Query", fieldName, variables)
);
}) as UpdateResolver),
playerDelete: (((result, args, cache, info) => {
// using result, args, cache here
}) as UpdateResolver),
},
};
什么是TypeScript中的作为
运算符?
它告诉TypeScript编译器认为运算符之前的表达式在运算符之后具有类型。你可以用它做一些奇怪的事情:
const test = "some string" as number;
// "test" is number here!!
所以在使用它的地方要小心!当您将其应用于函数时,TypeScript将看到例如参数one应该具有类型T
,因此它假装函数也采用类型T
的参数。
作为,还有一种替代方法,但不能在TSX文件中使用:
const something = <number>"hello";
// don't do that if you don't know the actual type!
当然这个例子是错误的,因为TypeScript会认为字符串是一个数字,但它不是。但是它显示了类型断言的用法。
在TypeScript中,< code>class关键字引入了值和类型: 有没有一种方法可以使函数返回既是类型又是值的东西? 问这个问题的另一种方法是:有没有办法在下面声明的类型,以便类型检查? 看到这个打字游戏了吗
React/Typescript中对象的类型是什么,例如: 如果我需要将它定义为一个对象,我应该输入什么类型,而不是
我有两个不同类型的对象,我想用一个对象指定另一个。 的接口有一个,而到
TS演示:https://tsplay.dev/mLO04N , 问题:当我将reduce中返回对象的children注释去掉,返回的类型就变成any了,请问正确姿势应该是? 我把提取的值像这样复制给一个对象,获取的类型是对的,但是如果把这个对象作为返回数据类型就不对了 请不要试图类似用下面断言的方式来解决,我试图通过正确的姿势获取数据类型:
注意:我知道有很多关于这个主题的帖子,我已经审阅了相当多的没有成功(请看我在这篇文章底部的参考资料)。 我正试图使用Visual Studio代码在TypeScript中运行一个非常简单的测试,其中我在一个文件中声明一个类并将其导入到另一个文件中。但是,我仍然遇到一个问题,我正在导入的文件无法识别我从另一个文件导出的类的方法。 此时我收到的确切错误消息是: [ts]属性“Get FirstName
我在打字方面有点吃力。假设有一个literal对象,它的值是用spread运算符赋值的: 更新类型库后,将引发以下TS错误: 尝试在此答案中设置literal对象上的接口,但未解决此问题,因为一定是语法有问题: 将属性保存为的正确方法是什么?
问题内容: 例如,我正在尝试导出TS对象以获取以下JavaScript输出: 这是我的TS,但导出尚不明确, 我已经尝试过了,但是它的生成的输出是不期望的。我究竟做错了什么? 问题答案: 在ES6中,允许使用导出功能导出名称,或者默认情况下,您可以导出任何内容。该格式是这样的: 并且它将默认导出配置文件。对于您的情况,您应该执行以下操作: 如果要使用导出,请执行以下操作: 区别是: 至 注意-默认
我正在尝试将一个带有符号的对象定义为键类型,因为 MDN 说: 符号值可用作对象属性的标识符[…] 但是使用它作为键属性的类型: 导致以下错误: TS1023:索引签名参数类型必须为“字符串”或“数字”。 甚至它也可以用作索引类型。我正在使用最新的打字稿版本(),我发现了相关问题: 类型脚本:以符号为键解构对象(他使用的是符号的实际实例,我想要类型) TypeScript:当尝试使用字符串|数字时