function preparedData<T extends Record<string, {name: string, id: string}[]>>(data: T) {
return Object.keys(data).map((key) => {
return data[key as keyof T].map((a) => ({
val: a.name,
newId: a.id,
}));
});
}
// Эти данные можно получить на странице вашего приложения на платформе Tuya.
var accessId = "<access id>";
var apiSecret = "<api secret>";
// Сканируем сеть на наличие доступных устройств Tuya.
// Хранение найденных устройств реализуется как душе угодно
var scanner = new TuyaScanner();
scanner.OnNewDeviceInfoReceived += (sender, info) =>
{
// логика сохранения найденных устройств
};
var api = new TuyaApi(region: TuyaApi.Region.CentralEurope, accessId: ACCESS_ID, apiSecret: API_SECRET);
var devices = await api.GetAllDevicesInfoAsync(anyDeviceId: DEVICE_ID);
foreach(var device in devices)
{
Console.WriteLine($"Device: {device.Name}, device ID: {device.Id}, local key: {device.LocalKey}");
}
var device = new TuyaDevice("<IP адрес>", "<local key>", "<device id>");
// Пример команды включения лампочки
// Метод FillJson автоматически подставляет нужные параметры, поэтому сразу пишем запрос.
// Про методы DPS можно почитать в официальной документации Tuya
var onCommand = device.FillJson("{\"dps\":{\"20\":true}}");
var request = device.EncodeRequest(TuyaCommand.CONTROL, onCommand );
// Посылаем сигнал. Если устройство не ответит, то падает исключение
var encodedResponse = await device.SendAsync(request);
var response = device.DecodeResponse(encodedResponse);
Язык программирования же, не может быть написан на своем же языке - это прям похоже на какую-то рекурсию
То есть, если писать компилируемый язык программирования, то нужно использовать интерпретируемый язык, а вот для написания интерпретируемого языка программирования, нужно писать на компилируемом языке.
const sum = elements =>
Array.prototype.reduce.call(
elements,
(acc, n) => acc + (+n.value || 0),
0
);
const $form = $('form').on('change', 'select', () => {
$('input').val(sum($form.find('select')));
});
const input = document.querySelector('input');
const selects = document.querySelectorAll('form select');
const onChange = () => input.value = sum(selects);
selects.forEach(n => n.addEventListener('change', onChange));
document.querySelector('form').addEventListener('change', function(e) {
if (e.target.tagName === 'SELECT') {
document.querySelector('input').value = sum(this.getElementsByTagName('select'));
}
});
func main() {
fn := some
fmt.Println(fn())
fn = other
fmt.Println(fn())
}
func some() int {
return 1
}
func other() int {
return 2
}
formData := url.Values{}
formData.Set("user_forms[0][name]", authDate.fName)
...
resp, err := http.PostForm(postUrl, formData)
func someFunc(numbers NumberInterface) {
numbers.Sum()
}
type Numbers struct {
Num1 int
Num2 int
}
type ThreeNumbers struct {
Num1 int
Num2 int
Num3 int
}
func (n Numbers) Sum() int {
return n.Num1 + n.Num2
}
func (n ThreeNumbers) Sum() int {
return n.Num1 + n.Num2 + n.Num3
}
func SumAll(numbers NumberInterface) int {
return numbers.Sum()
}
#!/usr/bin/env bash
chmod +x /path/to/run.sh
~/.bash_aliases
строку alias run='/path/to/run.sh'