2015-10-19 3 views
8

Я пытаюсь написать клиент SES машинопись, используя AWS файл определений загруженных из https://github.com/borisyankov/DefinitelyTyped/blob/master/aws-sdk/aws-sdk.d.tsКак использовать определения AWD sdk для TypeScript?

Вот то, что я пробовал:

/// <reference path="../typings/aws-sdk.d.ts" /> 
var AWS = require('aws-sdk'); 
var ses:SES = new AWS.SES(); 

Здесь ошибка, что я получаю:

/usr/local/bin/tsc --sourcemap SesTest.ts 
SesTest.ts(3,9): error TS2304: Cannot find name 'SES'. 

Process finished with exit code 2 

Я не могу найти документацию о том, как это сделать. Пожалуйста помоги!

ответ

7

Изменить на:

import AWS = require('aws-sdk'); 
var ses:AWS.SES = new AWS.SES(); 

Примечание: если import неясно, вы, вероятно, хотите, чтобы прочитать о модулях: https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

СОВЕТ: всегда хорошая идея, чтобы увидеть тестовый файл для предполагаемого использования: https://github.com/borisyankov/DefinitelyTyped/blob/master/aws-sdk/aws-sdk-tests.ts

+1

Спасибо, это действительно полезно, и это решило мою непосредственную проблему, но теперь я застреваю, пытаясь использовать фактические определения типов. Например, как мне создать новый объект назначения? Я попробовал 'var dest = new AWS.Ses.Destination();' но я получаю эту ошибку: TypeError: Невозможно прочитать свойство «Целевое назначение» неопределенного –

+0

'var dest = new AWS.Ses.Destination();' определения могут быть неправильными (это лучшее усилие ... как и любая документация). Используйте утверждение типа, чтобы принудить его: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html – basarat

+0

Я делаю именно то, что вы сказали, и я плохо понимаю проблему достаточно, чтобы знать, как использовать утверждения типа, чтобы исправить это. Я просто вернусь к JavaScript для этого. Спасибо за вашу помощь. –

5

Я думаю, что более подходящий способ сделать это

import { <ServiceName> } from 'aws-sdk';

, например

import { DynamoDb } from 'aws-sdk';

с последующим

this.client = new DynamoDB(); в классе.

Я говорю, что это более уместно, потому что он использует синтаксис импорта TypeScript.

+0

Это должен быть лучший ответ и предпочтительный подход. – demisx

Смежные вопросы