Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3、类型脚本和图形节点(类型脚本接口中的可选字段)_Javascript_Visual Studio_D3.js_Typescript_Typing - Fatal编程技术网

Javascript D3、类型脚本和图形节点(类型脚本接口中的可选字段)

Javascript D3、类型脚本和图形节点(类型脚本接口中的可选字段),javascript,visual-studio,d3.js,typescript,typing,Javascript,Visual Studio,D3.js,Typescript,Typing,以下是中定义的D3.Layout.GraphNode和D3.Layout.GraphLink的定义 但是,GraphNode并不一定总是具有所有这些属性。例如,这里有一个GraphLink,它的源代码:GraphNode和目标代码:GraphNode,这两个属性都不具备所有属性 此外,我不能有这样的课程: class GraphData { nodes: D3.Layout.GraphNode[]; links: D3.Layout.GraphLink[]; } 因为这样做是

以下是中定义的
D3.Layout.GraphNode
D3.Layout.GraphLink
的定义

但是,
GraphNode
并不一定总是具有所有这些属性。例如,这里有一个
GraphLink
,它的
源代码:GraphNode
目标代码:GraphNode
,这两个属性都不具备所有属性

此外,我不能有这样的课程:

class GraphData {
    nodes: D3.Layout.GraphNode[];
    links: D3.Layout.GraphLink[];
}
因为这样做是行不通的:

var data:GraphData = {
    "nodes": [{
        "group": 0,
        "id": 0
    }, {
        "group": 0,
        "id": 1
    }, {
        "group": 0,
        "id": 2
    }],
    "links": [{
        "source": 0,
        "target": 2,
        "value": 1
    }, {
        "source": 0,
        "target": 0,
        "value": 1
    }, {
        "source": 2,
        "target": 1,
        "value": 1
    }, {
        "source": 2,
        "target": 1,
        "value": 1
    }]
}
typescript编译器给了我以下错误:

Compile Error. 
See error list for details
 C:/Projects/MyGraph/app.ts(111,23): error TS2082: Supplied parameters do not match any signature of call target:

Types of property 'nodes' of types '{ "nodes": { "group": number; "id": number; }[]; "links": { "source": number; "target": number; "value": number; }[]; }' and 'GraphData' are incompatible:

Type '{ "group": number; "id": number; }' is missing property 'index' from type 'D3.Layout.GraphNode'.
解决此问题的一种方法是将接口
GraphNode
中的所有字段都设置为可选。但是界面是无用的。 在这种情况下,如何利用TypeScripts静态类型?

所有这些都不是必需的,但可能有一些是必需的,接口定义尚未反映出这一点。也许您可以标记哪些是可选的社区支持

无论如何。当你想对他人实施严格的行为,但又想灵活地突破自我时,你可以使用任何方法。e、 g:

var data:GraphData = <any>{
    "nodes": [{
        "group": 0,
        "id": 0
    }, {
        "group": 0,
        "id": 1
    }, {
        "group": 0,
        "id": 2
    }],
    "links": [{
        "source": 0,
        "target": 2,
        "value": 1
    }, {
        "source": 0,
        "target": 0,
        "value": 1
    }, {
        "source": 2,
        "target": 1,
        "value": 1
    }, {
        "source": 2,
        "target": 1,
        "value": 1
    }]
}
var数据:GraphData={
“节点”:[{
“组”:0,
“id”:0
}, {
“组”:0,
“id”:1
}, {
“组”:0,
“id”:2
}],
“链接”:[{
“来源”:0,
"目标":二,,
“价值”:1
}, {
“来源”:0,
“目标”:0,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}]
}
所有这些都不是必需的,但可能有些是必需的,并且接口定义尚未反映出这一点。也许您可以标记哪些是可选的社区支持

无论如何。当你想对他人实施严格的行为,但又想灵活地突破自我时,你可以使用任何方法。e、 g:

var data:GraphData = <any>{
    "nodes": [{
        "group": 0,
        "id": 0
    }, {
        "group": 0,
        "id": 1
    }, {
        "group": 0,
        "id": 2
    }],
    "links": [{
        "source": 0,
        "target": 2,
        "value": 1
    }, {
        "source": 0,
        "target": 0,
        "value": 1
    }, {
        "source": 2,
        "target": 1,
        "value": 1
    }, {
        "source": 2,
        "target": 1,
        "value": 1
    }]
}
var数据:GraphData={
“节点”:[{
“组”:0,
“id”:0
}, {
“组”:0,
“id”:1
}, {
“组”:0,
“id”:2
}],
“链接”:[{
“来源”:0,
"目标":二,,
“价值”:1
}, {
“来源”:0,
“目标”:0,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}]
}

感谢有关的提示,d3引擎甚至自动生成
id
字段,以便
链接的
目标
属性正常工作。我考虑过将可选字段标记为可选字段,并打开一个合并请求以DefinitelyTyped,但很难说哪一个是可选的@LevDubinets这就是typescript之前的生活:)是的,我想,但在这种情况下,typescript似乎不能解决它创建时要解决的问题。它可以解决您自己的代码。它的第三方js是痛苦的,当然,它对我自己的代码来说是无价的!但是,我们多久编写一次不使用第三方库的javascript?感谢关于的提示,d3引擎甚至自动生成
id
字段,以便
链接的
目标
属性正常工作。我考虑过将可选字段标记为可选字段,并打开一个合并请求以DefinitelyTyped,但很难说哪一个是可选的@LevDubinets这就是typescript之前的生活:)是的,我想,但在这种情况下,typescript似乎不能解决它创建时要解决的问题。它可以解决您自己的代码。它的第三方js是痛苦的,当然,它对我自己的代码来说是无价的!但是我们多久编写一次不使用第三方库的javascript?