gpt4 book ai didi

JavaScript 到 TypeScript : Intellisense and dynamic members

转载 作者:数据小太阳 更新时间:2023-10-29 06:05:19 29 4
gpt4 key购买 nike

我有一个 JavaScript 对象,它动态地允许成员作为访问器属性绑定(bind)到对象的实例:

来源

function DynamicObject(obj) {
for (var prop in obj) {
Object.defineProperty(this, prop, {
get: function () { return obj[prop]; },
set: function (value) { obj[prop] = value; },
enumerable: true,
configurable: false
});
}
}

用法

var obj = new DynamicObject({
name: "John Smith",
email: "john.smith@test.net",
id: 1
});

创建obj 时,构造函数参数的成员作为访问器属性绑定(bind)到obj。这些显示在智能感知中

Intellisense for dynamic members

我想知道是否可以在 TypeScript 中模拟这种行为(包括智能感知)?

注意事项

当您在 TypeScript 中运行此代码时,没有智能感知,因为一切都是any,所以 TypeScript 并不知道发生了什么。

最佳答案

你不能。这些是完全动态的属性,在运行时添加,因此您不可能在编译时知道它们是什么。我还要争辩说,您不那么早知道它们是什么;如果您有强制执行的约束,则应单独说明它们(下面的第一个示例)。

如果您的代码依赖于一组访问器,您应该将它们直接放在接口(interface)或契约中,因为您提前知道您期望它们并且应该公布这一点。您可以使用可选属性(访问器定义较低)来简化操作:

interface HasSomeProps {
foo: string;
bar?: string;
}

class DoesTheProps implements HasSomeProps {
set foo(value) {
// ...
}
}

如果你有一堆一致(或半一致)的访问器,你可以在你的类型上定义一个索引器,比如:

interface AccessStrings {
[key: string]: string;
}

这不允许您限制 key 。如果需要,您应该明确列出属性。

关于JavaScript 到 TypeScript : Intellisense and dynamic members,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900015/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com