如果我想以编程方式将属性分配给Javascript中的对象,我会这样做:
var obj = {};
obj.prop = "value";
Run Code Online (Sandbox Code Playgroud)
但在TypeScript中,这会产生错误:
类型"{}"的值不存在属性"prop"
我应该如何在TypeScript中为对象分配任何新属性?
我发现C#中的命名参数功能在某些情况下非常有用.
calculateBMI(70, height: 175);
Run Code Online (Sandbox Code Playgroud)
如果我想在javascript中使用该怎么办?
我不想要的是 -
myFunction({ param1: 70, param2: 175 });
function myFunction(params){
// Check if params is an object
// Check if the parameters I need are non-null
// Blah blah
}
Run Code Online (Sandbox Code Playgroud)
我已经使用过这种方法.还有另外一种方法吗?
我可以使用任何库来做这件事.(或者有人可以指出我已经做过的那个)
在C#中,可以使用命名参数调用给定方法:
myObject.SetSize(width: 100, height: 100);
它们似乎主要用于满足可选参数,但是......它们还极大地提高了方法调用站点的可读性.它还可以保护您免受错误的参数规范.
从我能够收集的内容来看,如果我希望从TypeScript中的 "声明性调用站点"中受益,我最好使用基于给定接口的"参数对象".
interface SizeArguments {
width: number;
height: number;
}
export class MyClass {
setSize(args: SizeArguments) {
/* Set size... */
}
}
new MyClass().setSize({ width: 100, height: 100 });
Run Code Online (Sandbox Code Playgroud)
适合我!但对于C#中如此微不足道的事情来说,这仍然是相当多的工作.这种方法是我现在能做的最好吗?还是我从根本上监督一些事情?
我正在尝试为以下函数的成员提供类型。
args是具有data类型属性的对象UserCreateInput
所以,从这个:
createUser(parent: any, args: any, context: any) {
return context.prisma.createUser(args.data)
}
Run Code Online (Sandbox Code Playgroud)
我是这样写的:
createUser(parent: any, args: {data: UserCreateInput}, context: any) {
return context.prisma.createUser(args.data)
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何替换“xxx”,createUser(parent: any, xxx, context: any)所以我可以简单地返回return context.prisma.createUser(data)
我希望能够定义一个接受箭头函数作为参数的方法.函数参数应该能够定义自己的0个或多个命名参数.我怎样才能做到这一点?
我试过了
public doSomething(fn: () => any) {}
Run Code Online (Sandbox Code Playgroud)
和
public doSomething(fn: (...args) => any) {}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试按如下方式调用它时,它们都抛出"提供的参数不匹配"错误:
doSomething((test: string) => {})
Run Code Online (Sandbox Code Playgroud)
(请注意,此函数的参数类型和数量可能因每次使用而异,因此我无法在原始方法上设置类型.)
我可以使用...args传递函数中的语法提供参数,但我希望能够键入和命名特定参数.
有没有办法做到这一点?